乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      程序員用 vim 編輯代碼的常用技巧

       herowuking 2014-04-10

      程序員用 vim 編輯代碼的常用技巧

      在oschina看到不錯(cuò)的vim技巧文章,讀了之后vi水平大有提高呵呵。 總結(jié)一下寫代碼的常用vi的命令,以后繼續(xù)總結(jié)到這里來吧。大家有什么好的技巧也可以教我一下。

       

         

      -----------基本動(dòng)作--------------

      i     切換到插入模式,在光標(biāo)之前

      a     切換到插入模式  在光標(biāo)之后,自己體會(huì)和i的區(qū)別吧

      I     切換到插入模式,光標(biāo)在行的開始

      A     切換到插入模式  光標(biāo)在行的結(jié)尾


      v  進(jìn)入 visual mode ,選擇模式?

      R  進(jìn)入替換模式,輸入的文字直接覆蓋替換光標(biāo)下的字符。 直到按<Esc>建退出。


      <Esc>  退出輸入模式,

       

      :w    保存文件

      :w  newfilename  文件另存為

      :q    退出編輯

      :wq   保存并退出

      :edit  打開另外一個(gè)文件, 可以用<TAB> 補(bǔ)全


      u     undo  取消上次修改

      ctrl + R    redo 重復(fù)上次修改


      :help   后面加上某個(gè)命令,查看vim的幫助文檔

       

      --------------編程常用設(shè)置--------------------

      :set nowrap  / set wrap   "禁止自動(dòng)換行/啟用自動(dòng)換行  有時(shí)候不自動(dòng)換行看起來更清楚一些

      :set number   "顯示行號(hào)

      :set tabstop=4    "設(shè)置tab的寬度

      :set shiftwidth=4  "設(shè)置自動(dòng)縮進(jìn)的的寬度

      :syntax on   "語法高亮

      :set filetype=c    "如果文件擴(kuò)展名不是 c,可以用這個(gè)為vim指定文件格式。

      :set cindent    "啟用 C 的自動(dòng)縮進(jìn)

      :set colorcolumn=80    "設(shè)置代碼一行最多80字符長度的可視邊界,7.3版本以后可用。

      "不大常用的tab相關(guān)設(shè)置 :set softtabstop=4 ,:set smarttabs,  :set  expandtab   把插入的tab 都轉(zhuǎn)換成空格  , 還有retab等,按照設(shè)置重新轉(zhuǎn)換tab ? (用法 :%retab8 )  ,

       "突出顯示當(dāng)前行 set nocursorline

      set cursorline

      " 自動(dòng)切換當(dāng)前目錄為當(dāng)前文件所在的目錄

      set autochdir

      " 允許在有未保存的修改時(shí)切換緩沖區(qū),此時(shí)的修改由 vim負(fù)責(zé)保存

      set hidden

       set nobackup  "禁用vim的自動(dòng)備份文件功能

      " 搜索時(shí),高亮顯示搜索到的單詞


      set hlsearch

      colorscheme evening    "設(shè)置代碼高亮 的 顏色配置方案為  evening 

      "我比較喜歡下面這幾種配色,都可以在網(wǎng)上找到吧 monokai  evening  twilight  vividchalk  freya  spiderhawk   

      colorscheme monokai  "我覺得這個(gè)最好看了


      set exrc  "設(shè)置vim加載所有目錄下.vimrc文件,這樣每個(gè)工程目錄就可以有自己的自定義設(shè)置了。


      set secure  '限制上一步設(shè)置里面的目錄下的vimrc不能使用某些不安全的命令



      很多配色方案可以到vim網(wǎng)站去找,不過這里也有個(gè)抓屏,查看方便

      VIM Color Scheme Test 

      http://vimcolorschemetest./svn/html/index-c.html



      設(shè)置編碼, 參考 正確設(shè)置 Vim 的字符編碼選項(xiàng) http:///vim-gvimvim-on-win32

      set encoding=utf-8  這個(gè)設(shè)置了之后會(huì)在文件結(jié)尾加上編碼標(biāo)志,只是gvim內(nèi)部使用的? 我看有問題再設(shè)置這個(gè)選項(xiàng)好了

      set fileencoding=

      上面的設(shè)置可以直接執(zhí)行也可以放到vimrc文件里面去,以便每次啟動(dòng)時(shí)有效??梢韵旅孢@個(gè)加到vimrc方便使用

       編碼設(shè)置相關(guān)設(shè)置的說明: 來自 http://wensuper./blog/1495384

             encoding(enc):encoding是Vim的內(nèi)部使用編碼,encoding的設(shè)置會(huì)影響Vim內(nèi)部的Buffer、消息文字等。在Unix環(huán)境下,encoding的默認(rèn)設(shè)置等于locale;Windows環(huán)境下會(huì)和當(dāng)前代碼頁相同。在中文Windows環(huán)境下encoding的默認(rèn)設(shè)置是cp936(GBK)。 
              fileencodings(fencs):Vim在打開文件時(shí)會(huì)根據(jù)fileencodings選項(xiàng)來識(shí)別文件編碼,fileencodings可以同時(shí)設(shè)置多個(gè)編碼,Vim會(huì)根據(jù)設(shè)置的順序來猜測(cè)所打開文件的編碼。 
              fileencoding(fenc):Vim在保存新建文件時(shí)會(huì)根據(jù)fileencoding的設(shè)置編碼來保存。如果是打開已有文件,Vim會(huì)根據(jù)打開文件時(shí)所識(shí)別的編碼來保存,除非在保存時(shí)重新設(shè)置fileencoding。 
      termencodings(tenc):在終端環(huán)境下使用Vim時(shí),通過termencoding項(xiàng)來告訴Vim終端所使用的編碼。 
              termencodings(tenc):在終端環(huán)境下使用Vim時(shí),通過termencoding項(xiàng)來告訴Vim終端所使用的編碼。 

      |:help encoding-values|列出Vim支持的所有編碼。 




      設(shè)置gui界面 字體,打開時(shí)自動(dòng)最大化

      if has("gui_running")

          if has("win32")

              " 設(shè)定 windows 下 gvim 啟動(dòng)時(shí)最大化

              autocmd GUIEnter * simalt ~x

              " 設(shè)定 windows 下圖形界面下的字體。該字體需要自己下載安裝,下載地址:

              "好像程序員比較喜歡的字體有

              "1. Bitstream Vera Sans Mono

              "http://www-old./fonts/

              "http://ftp./pub/GNOME/sources/ttf-bitstream-vera/1.10/

              "2. 微軟visual stuido 自帶的 Consolas字體

              "http://www.microsoft.com/en-us/download/details.aspx?id=17879

              " 下載安裝完,gvim的菜單里面又有了Consolas 字體,可以用下面這個(gè)設(shè)置

              "  set guifont=Consolas:h12:cANSI     

              "  Bitstream_Vera_Sans_Mono在默認(rèn)的 gvim菜單里面有這個(gè),

              "下面這個(gè)設(shè)置字體大小為12

               set guifont=Bitstream_Vera_Sans_Mono:h12:cANSI     

          else

              " 設(shè)定 linux 下圖形界面下的字體,該字體 Fedora 7 自帶

              set guifont=DejaVu\ LGC\ Sans\ Mono\ 14

          endif

      endif



      記錄上次文件打開時(shí)的光標(biāo)的位置,這個(gè)很好,下次打開自動(dòng)把光標(biāo)移到上次修改的地方。 BufReadPost 是文件加載完的時(shí)候的動(dòng)作吧

       autocmd BufReadPost *

      \ if line("'\"")>0&&line("'\"")<=line("$") |

      \exe "normal g'\"" |

      \ endif



      "隱藏gvim的工具欄和菜單,按f1時(shí)才彈出, Toggle Menu and Toolbar
      set guioptions-=m
      set guioptions-=T
      map <silent> <F1> :if &guioptions =~# 'T' <Bar>
              \set guioptions-=T <Bar>
              \set guioptions-=m <bar>
          \else <Bar>
              \set guioptions+=T <Bar>
              \set guioptions+=m <Bar>
          \endif<CR>

      參考 http://vimdoc./htmldoc/gui.html




      " 這個(gè)比較放到上面的go語言插件的后面才起作用,go那里好像重設(shè)置語法了

      " 高亮顯示行尾的空格,和空格和TAB鍵混用的情況

      " http://vim./wiki/Highlight_unwanted_spaces

      " ctermbg 必須用顏色名字,guibg可以用顏色值

      highlight default ExtraWhitespace ctermbg=red guibg=#F92672

      match ExtraWhitespace /\s\+$\| \+\t/

      " 可以用下面這個(gè)刪掉所有的行尾空格

      " %s/\s\+$//

      " 或者像下面這個(gè)map <leader>w git stripspace命令,來刪掉這個(gè) whitespace error

      " 默認(rèn)的<leader>鍵是 “\ ” 有的是逗號(hào)",”

      function! Preserve(command)

        " Preparation: save last search, and cursor position.

        let _s=@/

        let l = line(".")

        let c = col(".")

        " Do the business:

        execute a:command

        " Clean up: restore previous search history, and cursor position

        let @/=_s

        call cursor(l, c)

      endfunction


      " delete all trailing whitespace in current file

      if has ("win32")

      map <leader>w :call Preserve(":%!c:/git/bin/git.exe stripspace")<CR>

      else

      map <leader>w :call Preserve(":%!git stripspace")<CR>

      endif



      set path="" vim搜索c的+include文件的路徑,比如下面 [I   gf 命令等需要打開頭文件的時(shí)候,就要根據(jù)這個(gè)path變量去搜索了。


      ------------移動(dòng)光標(biāo)---------------

      h   j   k   l  光標(biāo) “左 下 上 右” 移動(dòng)

      0        光標(biāo)移動(dòng)到本行的的開始

      ^        光標(biāo)移動(dòng)到本行的第一個(gè)字符

      $        光標(biāo)移動(dòng)到本行末尾

      b        光標(biāo)移到單詞的開頭

      e        光標(biāo)移到單詞的末尾

      w        光標(biāo)移到下一個(gè)單詞

      大寫的 E W和小寫的e w類似,不過單詞是以空格作為分界。移動(dòng)光標(biāo)到下一個(gè)空格的的前或者后面一個(gè)字符。

      +       光標(biāo)移到下一行的開頭

      -       光標(biāo)移到上一行的開頭

      %        光標(biāo)在匹配 最近() {} 塊切換,這個(gè)很有用啊,類與visual studio中的ctrl + ]

      ‘’       兩次單引號(hào),光標(biāo)移到上次修改的位置。 兩次反引號(hào) ` 才是正式的寫法? 一個(gè)反引號(hào)加上一點(diǎn)(`.)也可以跳到最后一個(gè)修改的位置(參加mark和macro的用法  http://www./vi-vim-tutorial-5.gif

              其實(shí)是反引號(hào)書簽的用法來的,    “m + 一個(gè)字母表示的書簽名字”  就在當(dāng)前行設(shè)置一個(gè)書簽。   “反引號(hào) + 一個(gè)字母表示的書簽名字” 就跳到該書簽的位置。

           標(biāo)簽的一個(gè) 用法,比如要?jiǎng)h大量內(nèi)容,可以在某個(gè)地方ma ,mz 之類的設(shè)置標(biāo)簽到某行,然后把光標(biāo)移到對(duì)應(yīng)的位置,再 d`a   y`z 之類的可以刪除到指定標(biāo)簽位置的所有內(nèi)容。

           gvim里面單引號(hào)和反引號(hào)一樣的效果,ma 之后, ‘a(chǎn)可以移動(dòng)到書簽a的位置



      G        光標(biāo)移到文件的末尾

      gg       光標(biāo)移到文件的開始

      行號(hào)+G   或者 行號(hào)+gg    跳轉(zhuǎn)到第幾行

      f + 字符   光標(biāo)移到本行的 下一個(gè)指定字符,搜索

      F + 字符   光標(biāo)移到本行的 上一個(gè)指定字符,反向搜索

      {  段落的開始

      }  段落的結(jié)尾


      (  句子的開始

      )  句子的結(jié)尾


      g,    最近的修改

      g;    最近的修改


      gd 移到程序變量的定義   在函數(shù)里面查找

      gD 移到程序變量的定義   在文件里面查找


      [(   移到光標(biāo)位置到  類似if 的條件判斷的括號(hào)的開始

      ])   移到光標(biāo)位置到 類似if 的條件判斷的括號(hào)的結(jié)尾

      [{    代碼塊的開始(for 循環(huán)if等的大括號(hào))

      ]}    代碼塊的結(jié)尾 (for 循環(huán)if等的大括號(hào))

      [[  移到函數(shù)的開始{

      ]}  移到函數(shù)的結(jié)尾的}


      [#   ]#   移到外層#if  #endif的 

      [/  代碼注釋的塊的開始

      ]/  代碼注釋的塊的結(jié)尾

      參考 *29.3* Moving through a program

       http://vimdoc./htmldoc/usr_29.html#29.3

       

       zz       光標(biāo)當(dāng)前位置滾動(dòng)到移到屏幕的中間

      zt  zb  光標(biāo)當(dāng)前位置滾動(dòng)到屏幕頂端和底部

      shitf + M   光標(biāo)滾動(dòng)到移到屏幕的中間, 自己體會(huì) 和zz的區(qū)別

      shitf + H   光標(biāo)滾動(dòng)到移到屏幕的頂端

      shitf + L   光標(biāo)滾動(dòng)到移到屏幕的底部

      ctrl + E    向上滾屏

      ctrl + Y   向下滾屏, windows的vim聽說需要重新map一下命令才有效果,否則是redo效果,自己google一下吧

      ctrl + F  ctrl +B  上下翻頁


      ctrl  + o    ctrl + i  移動(dòng)光標(biāo)到上一次光標(biāo)所在的位置,在光標(biāo)的歷史位置記錄里面前后移動(dòng)。

      *CTRL-O* 

      CTRL-O Go to [count] Older cursor position in jump list 
      (not a motion command). {not in Vi} 
      {not available without the |+jumplist| feature} 

      <Tab> or *CTRL-I* *<Tab>* 
      CTRL-I Go to [count] newer cursor position in jump list 
      (not a motion command). 
      In a |quickfix-window| it takes you to the position of 
      the error under the cursor. 
      {not in Vi} 
      {not available without the |+jumplist| feature} 

      --------------搜索用法-----------------

      # 和 *      在文件搜索光標(biāo)當(dāng)前位置的單詞,高亮位置。向前和向后搜索。 非常有用。

      g# g*      同# *用法,但搜索的時(shí)候,當(dāng)前單詞如果作為其他的單詞的一部分的時(shí)候,也高亮顯示。# 和 *  要求完整匹配,這個(gè)值要求部分包含就可以了

      /  和 ?    進(jìn)入搜索模式,在文檔搜索相應(yīng)的單詞。 向前和向后

       

      n  和 N     上面的兩個(gè)搜索用法之后,向前和反向搜索下一個(gè)

       

      [I     類似# 和 * 用法,不過顯示一個(gè)快速列表。 還有這個(gè)用來搜索c /c++變量定義的,默認(rèn)會(huì)用tags,但如果沒有tags,也會(huì)在include 的頭文件里面也會(huì)搜索,準(zhǔn)確找到該類型的定義。這點(diǎn)和gD  gd比較類似。 gD在文件里面搜索變量定義,gd在函數(shù)里面搜索,但這個(gè)[I 會(huì)搜索#include的文件。 include的查找目錄由vim的path變量定義,可以修改vimrc配置文件指定path變量,不然vim會(huì)找不到頭文件的。

      數(shù)字 + [ + <TAB>     跳到上面一條命令里面顯示的第幾個(gè) 位置去。

      ]I  類似[I   但只列出后面的

      ]i  類似[I   但只列出前面的

      參考 *29.4* Finding global identifiers  http://vimdoc./htmldoc/usr_29.html#29.4



       :/buf\c   搜索內(nèi)容時(shí),后面加上 \c 不區(qū)分大小寫

      ---顯示搜索命令歷史--

      q/ 顯示搜索命令歷史的窗口 

      q? 顯示搜索命令歷史的窗口 可以選擇重用以前用過的搜索查找命令


      在多個(gè)文件里面搜索

      :vimgrep /pattern/[j][g] file file2... fileN



      /joe/e                      : cursor set to End of match  搜索時(shí)可以移動(dòng)光標(biāo)到相對(duì)單詞結(jié)尾偏移的位置

      3/joe/e+1                   : find 3rd joe cursor set to End of match plus 1 [C] 

      /joe/s-2                    : cursor set to Start of match minus 2  搜索時(shí)可以移動(dòng)光標(biāo)到相對(duì)丹迪開頭偏移的位置

      :g/gladiolli/#              : 彈出所有的包含gladiolli的行供    類似  [I  但【I使用的是當(dāng)前光標(biāo)下的詞來搜索


      /jo[ha]n     Search john or joan

      /\< the      Search the, theatre or then

      /the\>       Search the or breathe

      /\< the\>   Search the

      /fred\|joe   Search fred or joe

      /\<\d\d\d\d\>   Search exactly 4 digits

      /^\n\{3}    Find 3 empty lines


      ------------替換操作------------------------------

      :s/要替換的單詞/替換為的內(nèi)容/             和perl里面的正則一樣啊,  

      :%s/buf_/buf/c    在全文件替換buf_ 為buf,并且詢問是否替換

      :127,215 s/foo/bar    替換127行到215之間的foo為bar。

      . 表示當(dāng)前行, $表示最后一行,


      :%s/\%Vold/new/g                : Do a substitute on last visual area [N]


      . or $ for current and last lines respectively. One could also use relative prefixes + and - to refer to offsets after or before the curent line, respectively. Thus: :.,$j meaning "from the current line to the last line, join them all into one line". :% is synonymous with :1,$ (all the lines).

      The :... g and :... v commands bear some explanation as they are incredibly powerful. :... gis a prefix for "globally" applying a subsequent command to all lines which match a pattern (regular expression) while :... v applies such a command to all lines which do NOT match the given pattern ("v" from "conVerse"). As with other ex commands these can be prefixed by addressing/range references. Thus:.,+21g/foo/d means "delete any lines containing the string "foo" from the current one through the next 21 lines" while :.,$v/bar/d means "from here to the end of the file, delete any lines which DON'T contain the string "bar."


      參考文檔 |10.2| Substitution

       http://vimdoc./htmldoc/usr_10.html#10.2



      :%s/old/new/g    Replace all occurences of old by new in file

      :%s/old/new/gw    Replace all occurences with confirmation

      :2,35s/old/new/g   Replace all occurences between lines 2 and 35

      :5,$s/old/new/g   Replace all occurences from line 5 to EOF

      :%s/^/hello/g    Replace the begining of each line by hello

      :%s/$/Harry/g    Replace the end of each line by Harry

      :%s/onward/forward/gi   Replace onward by forward, case unsensitive


      ---------------刪除、復(fù)制和粘帖--------------------

      o      在光標(biāo)位置下面新建一行

      O     在光標(biāo)位置上面新建一行

      j        合并上下兩行為一行

      d       刪除

      c       change 剪切并進(jìn)入插入模式, 和d的區(qū)別是這個(gè)會(huì)把剪切的記錄也保存到重復(fù)命令   .    的記錄里面去。

      C    D   d$  c$   刪到行的結(jié)尾

      s      刪除當(dāng)前字符并且進(jìn)入插入模式

      S      刪掉一整行然后進(jìn)入插入模式

      行數(shù)+ dd    刪除指定行數(shù),比如 3dd  刪除3行

      行數(shù)+ cc    和 上一個(gè)類似,但會(huì)記錄重復(fù)記錄。

       yy                 復(fù)制當(dāng)前行內(nèi)容到剪切板

      行數(shù)+ yy         復(fù)制多少行, 3yy  復(fù)制3行 

      p    在光標(biāo)前粘貼

      P  在光標(biāo)后粘貼

      r   替換當(dāng)前選中內(nèi)容,關(guān)于選擇,參見下面xisual 模式


      可以組合使用

      y2w 復(fù)制后面連個(gè)單詞

      d2w    刪除兩個(gè)單詞

      db     刪除到單詞開頭

      di(   di)     da(  da)   刪除括號(hào)里面的塊

      di>    di<

      di{    di}

      同樣有

       ce     cw   c3w 等


      d/foo  刪除到后面第一個(gè)出現(xiàn)foo的地方

      y?bar  同樣有復(fù)制到前面第一個(gè)出現(xiàn)bar的位置

      y2/foo 復(fù)制當(dāng)前光標(biāo)位置到后面第二次出現(xiàn)foo之間的字符。

      d/fred/                                :delete until fred

      y/fred/                                :yank until fred

      c/fred/e                               :change until fred end


      利用標(biāo)簽用法,刪除或復(fù)制大塊數(shù)據(jù)

      可以在某個(gè)地方ma ,mz 之類的設(shè)置標(biāo)簽到某行,然后把光標(biāo)移到對(duì)應(yīng)的位置,再 d`a  c'a  y`z   之類的可以刪除或復(fù)制從當(dāng)前光標(biāo)所在wei位置到標(biāo)簽所在位置的所有內(nèi)容。 修阿刪除多行數(shù)據(jù)時(shí)這個(gè)比較方便。


      利用visual模式,刪除或復(fù)制大塊數(shù)據(jù)。

      按v 或者V 進(jìn)入visual模式后,可以選擇大塊內(nèi)容,用d c y 等進(jìn)行操作。參考某某的 “選擇塊”的介紹。



      "*  雙引號(hào)+星號(hào) 再加上復(fù)制或者粘貼命令,把內(nèi)容復(fù)制到系統(tǒng)剪切板,

      "*yy  把當(dāng)前行復(fù)制到系統(tǒng)剪切板

      "*p   從系統(tǒng)剪切板粘帖出來

       


      :%s/ *$//g      Delete all white spaces

      :g/string/d     Delete all lines containing string

      :v/string/d     Delete all lines containing which didn’t contain string

      :s/Bill/Steve/    Replace the first occurence of Bill by Steve in current line

      :s/Bill/Steve/g    Replace Bill by Steve in current line

      :%s/Bill/Steve/g    Replace Bill by Steve in all the file

      :%s/\r//g             Delete DOS carriage returns (^M)

      :%s/\r/\r/g             Transform DOS carriage returns in returns

      :%s#<[^>]\+>##g        Delete HTML tags but keeps text

      :%s/^\(.*\)\n\1$/\1/           Delete lines which appears twice

      ggVGg?                  Change text to Rot13

      ---------------------------------

      指定寄存器

      d   c  s  y p 等指令操作的內(nèi)容,默認(rèn)保存到 “” 寄存器。但也可以用雙引號(hào)加 一個(gè)字母表示的名字指定26個(gè)寄存器中任意的一個(gè)。

      小寫字母表示替換原有寄存器的內(nèi)容,大寫表示追加內(nèi)容到寄存器

      "ayy    復(fù)制當(dāng)前行內(nèi)容到 a號(hào)寄存器

      “Ayy   把當(dāng)前行內(nèi)容添加到寄存器a里面,如果以前a寄存器已經(jīng)有一行內(nèi)容了,那么這個(gè)做完a寄存器就有兩行內(nèi)容了。

      "ap  粘帖寄存器a里面內(nèi)容

      "bp  粘帖寄存器b里面內(nèi)容

      :reg             : display contents of all registers
      :reg a           : display content of register a
      qqq              : empty register "q"  應(yīng)該是記錄 一個(gè)空的宏到寄存器,所以寄存器就被清空了
      qaq              : empty register "a"


      其他的還有 0 到9好等寄存器,只讀寄存器等,參考文檔 

      registers

      http://vimdoc./htmldoc/change.html#registers


      :g/^\s*$/d                  : delete all blank lines

      :g!/^dd/d                   : delete lines not containing string

      :v/^dd/d                    : delete lines not containing string

      :g/joe/,/fred/d             : not line based (very powerfull)

      :g/fred/,/joe/j             : Join Lines [N]

      :g/^/t.                     : duplicate every line

      ----------------重復(fù)命令-----------------------

      .      按 “點(diǎn)” 這個(gè)句號(hào)字符重復(fù)執(zhí)行命令,  從上一個(gè)按 i 進(jìn)入“插入模式”開始到  esc建退出的所有動(dòng)作。

             非常有用。不如用了重復(fù)刪除 重復(fù)粘貼等。


       

      -------------選擇塊---------------------------

      vim里面的 “visual mode”應(yīng)該也去學(xué)一下。 選擇文字時(shí)用比較方便。就是進(jìn)入這個(gè)模式之后,把當(dāng)前光標(biāo)和你移動(dòng)到的光標(biāo)的內(nèi)容都選擇起來。

      v     進(jìn)入 visual 選擇模式,以字符為選擇單位

      V    選擇viusal模式,不過以整行為選擇單位

      然后就可以用 hjkl鍵選擇區(qū)域。 


      組合命令

      “viB”  選擇當(dāng)前光標(biāo)所在的兩個(gè)大括號(hào)包含的整個(gè)代碼塊,不包含大括號(hào)  

      “vaB”  選擇當(dāng)前光標(biāo)所在的兩個(gè)大括號(hào)包含的整個(gè)代碼塊,包含大括號(hào)

      類似的有

      vib vab   選擇兩個(gè)括號(hào)里面的一整塊內(nèi)容

      viw vaw  選擇一個(gè)單詞

       

      類的的組合有,用于選擇大括號(hào) 尖括號(hào)等里面的內(nèi)容,i不包含,a包含??梢院推渌庉嬅罱M合使用。

      ii{

      a{

      i(   a(

      i<  a< 

      i[   a[


      也可以用鼠標(biāo)直接選擇區(qū)域,那就是select mode,后用鼠標(biāo)選取之后,可以用ctrl + O  或者ctrl + G切換到visual mode。


      很多命令可以在 visual mode下面操作,參考這里

      http://vimdoc./htmldoc/visual.html#visual-operators


      比較常用的有,選擇多行之后進(jìn)行刪除復(fù)制,修改代碼縮進(jìn)等。


      ---------viusul mode的整塊操作模式----Blockwise operators------------

      ctrl  + v  開始進(jìn)入viusual mode的整塊操作模式選取。

      然后可以用hjkl 鍵選擇塊。

      可以I之后修改esc退出后就應(yīng)用到所有的行。 d刪除,p可以粘貼整塊的內(nèi)容等。

      windows因?yàn)榭旖萱I默認(rèn)ctrl +v 是粘貼,所以 ctrl + q才是塊操作。

      這個(gè)功能可以用來給多行代碼前面加上注釋 // 。


      其他的塊模式的操作有

      I 在block的前面插入

      A  添加字符串到 block的結(jié)尾

      c  C  修改block的每一行內(nèi)容為指定字符床

      < >  整block的縮進(jìn)修改

      r    替換

      d 刪除整個(gè)選中的block

      p 粘貼整塊block

      參考 http://vimdoc./htmldoc/visual.html#blockwise-operators





      其他visual模式說明參考詳細(xì)參見:

      http://vimdoc./htmldoc/visual.html#Visual

       

      -------------代碼縮進(jìn)-----------------

      <      選擇塊減少縮進(jìn),自己先用visual 模式,viB 選擇塊之后,再做這個(gè)就可以縮進(jìn)一整塊   

      >      選中塊增加縮進(jìn)。   這個(gè)縮進(jìn)寬度由  set shiftwidth=4 定義 

       <iB   >iB    <aB   >aB 可以直接使用,不用先選擇代碼塊。

      >i{   <a{ 等

      >%    也可以直接把光標(biāo)移到塊的前面或者后面的大括號(hào)那里,然后運(yùn)行    >%   命令就可以了,同樣應(yīng)也有 <%

      >i{     上面那個(gè)是把大括號(hào)一起移動(dòng)的,這個(gè)縮進(jìn)不包含大括號(hào)。

       =     自動(dòng)縮進(jìn)代碼塊,用法,先把光標(biāo)移到一塊的起始括號(hào)那里 { ,然后 執(zhí)行   =%  就可以格式化整個(gè)代碼塊了。

      >>   當(dāng)前行減少縮進(jìn), 左移

      <<    當(dāng)前行增加縮進(jìn),右移

      5>>   行數(shù)加縮進(jìn),那么就一共幾行一起調(diào)整縮進(jìn)

       


      組合命令

      ==   格式化當(dāng)前一行。

      =a{       等號(hào)加上其他選擇塊命令,  格式化 一個(gè) 代碼塊。

      1G=G    解釋1G移到文件開始, G移到文件結(jié)束,所以這個(gè)組合就是格式化整個(gè)文件的代碼。

      gg=G    和 1G=G  等價(jià)


        -------------------大小寫轉(zhuǎn)換--------------------------------------

       按 v 進(jìn)入”visual mode “ 模式,然后選中制定的文字,

      再  gu  ,選中的文字轉(zhuǎn)換為小寫。

          gU  選中的文字轉(zhuǎn)換為大寫。


      guW   guW 等命令可以直接轉(zhuǎn)換一個(gè)單詞的,但我在Windows的 gvim里面好像默認(rèn)沒有這個(gè)用法,只能先到visual選擇模式 gu才可以用??隙髂莻€(gè)是vim或者linux平臺(tái)的默認(rèn)設(shè)置吧。


      轉(zhuǎn)換光標(biāo)下面的字符的就是 vgu  vgU 啦,

      一開始發(fā)現(xiàn)不進(jìn)入 ”visual mode “ 模式不能進(jìn)行大小寫轉(zhuǎn)換,不過后來發(fā)現(xiàn),這些也是可以直接使用的,下面這些更方便一些吧

       ~ 將光標(biāo)下的字母大小寫反向轉(zhuǎn)換 

      guw 將光標(biāo)所在的單詞變?yōu)樾?nbsp;

      guw 將光標(biāo)所在的單詞變?yōu)樾?nbsp;

      gUw 將光標(biāo)所在的單詞變?yōu)榇髮?nbsp;

      guu 光標(biāo)所在的行所有字符變?yōu)樾?nbsp;

      gUU 光標(biāo)所在的行所有字符變?yōu)榇髮?nbsp;

      g~~ 光標(biāo)所在的行所有字符大小寫反向轉(zhuǎn)換


      同樣有 gU2w 等組合

      ------------------ 其他輔助編程用法-----------------------

      [CTRL-I, ]CTRL-I Search for a word under the cursor in the current file and

      any brought in by #include directives.

      gd,  Search for the definition of a variable 在函數(shù)里面查找

      gD Search for the definition of a variable 在整個(gè)文件查找

      ]CTRL-D, [CTRL-D Jump to a macro definition.

      ]d, [d, ]D, [D Display macro definitions


      CTRL-A,CTRL-X : increment, decrement next number on same line as the cursor 只在Linux下面起作用。Windows可能需要重新做一下按鍵映射


      ctrl + n   insert模式時(shí),在輸入很長的變量名字函數(shù)名字時(shí),可以使用這個(gè)做自動(dòng)補(bǔ)全,就不用完整的敲入整個(gè)變量名字了

      ctrl + p  按ctrl + n補(bǔ)全之后,如果不合適,可以用這個(gè)取消補(bǔ)全,


      ----------------------- 臨時(shí)退出 Vi/Vim、進(jìn)入 shell 環(huán)境后再回來的要求:-------------------------------

      方法一:使用 Ctrl-z 以及 fg 這兩個(gè)命令組合。

        這一解決方法主要利用了 Linux/Unix 的作業(yè)機(jī)制。具體原理是:Ctrl-z 命令將當(dāng)前的 Vi/Vim 進(jìn)程放到后臺(tái)執(zhí)行,之后 shell 環(huán)境即可為你所用;fg 命令則將位于后臺(tái)的 Vi/Vim 進(jìn)程放到前臺(tái)執(zhí)行,這樣我們就再次進(jìn)入 Vi/Vim 操作界面并恢復(fù)到原先的編輯狀態(tài)。

      方法二:使用行命令 :sh。

        在 Vi/Vim 的正常模式下輸入 :sh即可進(jìn)入 Linux/Unix shell 環(huán)境。在要返回到 Vi/Vim 編輯環(huán)境時(shí),輸入 exit 命令即可。

        這兩種方法實(shí)現(xiàn)機(jī)制不一定,但效果一樣,都非??旖萦行?。

      ---------------------------------取得外部輸入--------------------------------------------------------------

       : r!<cmd> 將命令 <cmd> 的輸出結(jié)果插入到當(dāng)前光標(biāo)所在位置 

      :r <file> 將文件 <file> 讀入到當(dāng)前光標(biāo)所在位置

      ---------------------把多條命令錄制為宏------------------------------

      q  加上 一個(gè)字母表示宏的名字      表示開始宏的錄制

      q  再次按q,表示錄制完成

      @  加 一個(gè)字母的表示的宏的名字,表示執(zhí)行對(duì)應(yīng)的宏

      比如qa 開始錄制宏a, 然后按q停止,再@a就可以執(zhí)行剛剛錄制的宏a了

      @@  執(zhí)行最后一次執(zhí)行過的宏。

      5@@ 重復(fù)執(zhí)行5次最后一次行的宏


      多個(gè)組合操作需要重復(fù)執(zhí)行的時(shí)候,使用這個(gè)功能可以方便很多。

      參考

      10.1*Record and playback commands

      http://vimdoc./htmldoc/usr_10.html#10.1


      http://www./vi-vim-tutorial-5.gif

      ------------------設(shè)置鍵盤快捷鍵-------------------

      The main commands to know when dealing with key bindings are:

      :map for the modes Normal, Insert, Visual and Command-line  所有模式都起作用

      :imap for Insert mode only     只在insert模式起作用

      :cmap for Command-line mode only

      :nmap for Normal mode only

      :vmap for Visual mode only


      一個(gè)例子,把ctrl + s 映射為后面保存文件

      :map <C-s> :w<cr>


      其他常用按鍵表示

      <CR>     : carriage Return for maps      <Space> 空格鍵
      <Esc>    : Escape
      <Leader> : normally \  change with :let mapleader = ","
      <Bar>    : | pipe
      下面這個(gè)用在按鍵映射里面不錯(cuò),不過肯能只在Linux下面有效,比如下面這個(gè)映射為在當(dāng)前目錄搜索當(dāng)前光標(biāo)所在的單詞
      	:nnoremap <F3> :grep <C-R><C-W> *<CR><esc>:cw<cr>
      CTRL-R CTRL-W   : pull word under the cursor into a command line or search
      CTRL-R CTRL-A   : pull whole word including punctuation
      CTRL-R -        : pull small register
      CTRL-R [0-9a-z] : pull named registers
      CTRL-R %        : pull file name (also #)


      參考 http://vimdoc./htmldoc/map.html

      ------------------------查看執(zhí)行過的命令 歷史記錄---------------------------


      : 上下鍵 查找和補(bǔ)全


      :history   列出所有的歷史記錄

      :his c  

      :his s

      -------------------VIM buffer 窗口-------------------------------------------------------

      VIM里面一個(gè)buffer對(duì)應(yīng)一個(gè)打開的文件


      " 允許在有未保存的修改時(shí)切換緩沖區(qū),此時(shí)的修改由 vim負(fù)責(zé)保存

      :set hidden


      "查看已經(jīng)打開的buffer

      :ls   或者 :buffers  命令都可以


      “在不同的buffer直接切換,這個(gè)很好用

      ctrl + 6


      "切換到對(duì)應(yīng)的buffer去 比如下面切換到第2個(gè)buffer 

      :buffer 2


      "用不同的窗口打開所有的buffer

      :ball

      :vertical ball  "在垂直分隔的窗口打開所有buffer


      :sbuffer  "split buffer到不同的窗口


      前后一個(gè)buffer

      :bnext   :bn

      :bprevious   :bp


      :bd[elete][!] [N]  可以指定號(hào)碼的buffer,不指定buffer號(hào)碼就關(guān)閉當(dāng)前buffer, 會(huì)關(guān)閉打開這個(gè)buffer的所有windoww,并顯示另外一個(gè)buffer。 不同于 :q[uit]  和 :close的關(guān)閉window命令


      另外還可以使用輔助插件

      bufexplorer.zip : Buffer Explorer 插件

      http://www./scripts/script.php?script_id=42

      安裝完 輸入 :BufExplorer  , 就會(huì)彈出一個(gè)包含所有buffer列表的窗口供選擇。用鼠標(biāo)或者鍵盤都可以跳轉(zhuǎn)的到對(duì)應(yīng)的buffer去。

      或者在normal模式直接輸入下面這個(gè)斜杠開始的命令,都可以打開bufexplorer的窗口。

        '\be' (normal open)  or 

        '\bs' (force horizontal split open)  or 

        '\bv' (force vertical split open) 


      "可以把f9映射為這個(gè)buffer瀏覽的快捷鍵。

      noremap <silent> <F9> :BufExplorer<CR>

      nmap <F10> :bn<CR>

      nmap <F11> :bp<CR>

      --------------------------------配置gvim左側(cè)文件瀏覽欄------------------

      安裝 nerdtree  這個(gè)插件

      https://github.com/scrooloose/nerdtree

      然后就可以,用  :NERDTree 命令啟動(dòng) 左側(cè)瀏覽欄,然后 在左邊點(diǎn)擊 文件名 就自動(dòng)打開,鼠標(biāo)中建點(diǎn)擊,在新的窗口打開文件。

      t 鍵 打開一個(gè)新的 tab 窗口里面打開文件。

      然后可以在vimrc中加入下面這行代碼讓vim 啟動(dòng)是自動(dòng)打開 文件瀏覽欄。

      autocmd vimenter * NERDTree


      安裝很簡單,網(wǎng)頁有說明

      cd ~/.vim/bundle
      git clone https://github.com/scrooloose/nerdtree.git

      在Windows 平臺(tái),放到vim的安裝目錄就可以了。沒有裝git自己下載對(duì)應(yīng)的插件文件放到對(duì)應(yīng)的目錄去就可以了。


      最好也安裝一下這個(gè)插件配合,這樣在gvim里面啟動(dòng)時(shí),自動(dòng)啟動(dòng)NERDTree 的文件瀏覽欄,并且打開新的tab是,這個(gè)文件瀏覽窗口也始終顯示。

      不用配置前面的autocmd vimenter * NERDTree 命令了。 他autoload目錄的插件自動(dòng)加載。

      https://github.com/jistr/vim-nerdtree-tabs


      有很多默認(rèn)選項(xiàng)開關(guān) ,可以參考網(wǎng)頁的說明

      let g:nerdtree_tabs_open_on_gui_startup=1     這個(gè)默認(rèn)就是1了,

      let g:nerdtree_tabs_open_on_console_startup=1   直接在字符終端的的vim里面也默認(rèn)啟動(dòng) NERDTree


      不過他這個(gè)插件加載比較慢,需要的時(shí)候再打開比較好

      " 把F2映射為顯示左側(cè)目錄瀏覽樹窗口開關(guān)

      map <F2> :NERDTreeToggle<CR>

      -----------------------c/c++ 結(jié)構(gòu)解析,函數(shù)快捷查找-------------------------------------------

      另外為了瀏覽文件是查看搜索函數(shù)名字,有人還喜歡安裝 

      cscope

      ctags

      taglist

      等插件,這樣查看搜索函數(shù)定義之類的方便一點(diǎn)吧。有需要的時(shí)候在網(wǎng)上找一下相關(guān)資料吧



      ------------------vim里面搜索目錄下的文件,quickfix模式和grep--------

      在vim里面直接搜索目錄下的文件的內(nèi)容


      :grep sendv *.c       使用外部grep程序

      :vimgrep /sendv/   *.c   使用內(nèi)部vim 模式的搜索,速度較慢 Vim 需要載入每個(gè)文件,就像編輯它們那樣。如果文件里沒有匹配,相應(yīng)

      的緩沖區(qū)又會(huì)被徹底刪除

      :vimgrep sendv\c   *.c   使用內(nèi)部vim 模式的搜索,速度較慢


      :help vimgrep

      greo 在windows系統(tǒng)默認(rèn)調(diào)用的是findstr /n命令來進(jìn)行搜索的的, 可以通過  :set grepprg 設(shè)置來修改設(shè)置

      linux缺省為 "grep -n " 參考

      http://vimcdoc./doc/options.html#'grepprg'

      我安裝了git 自帶一個(gè)mingw的grep 還是改為用grep好了,比findstr命令好用吧

      :set grepprg=c:/git/bin/grep.exe\ -n

      :grep -i sendv *.c 這樣就可以用grep的各種參數(shù)了

      其他的'grepformat'設(shè)置vim怎么解析grep的輸出,一般都不用修改了吧。參考vm的文檔



      搜索之后只顯示一行,可以:cc 重復(fù)顯示結(jié)果

      或者打開 quickfix窗口


      :cw[indow] [height]     當(dāng)存在可以識(shí)別的錯(cuò)誤時(shí),打開窗口。如果該窗口已經(jīng)打開且

                              沒有可識(shí)別的錯(cuò)誤,則將此窗口關(guān)閉。

      :cope[n] [height]       打開一個(gè)窗口顯示當(dāng)前的錯(cuò)誤列表。

      :ccl[ose]               關(guān)閉 quickfix 窗口。


      :colder 和 :cnewer  合適顯示十個(gè)搜索歷史記錄


      在打開的窗口里面可以直接用鼠標(biāo)雙擊和enter鍵可以跳到指定找到的指定位置去。

      但以前的窗口緩沖器沒有修改才行?   在quickfix 窗口  ctrl +w 在按enter鍵,可以在新窗口打開。


      ctrl + w 在窗口直接切換



      在quickfix模式里面常用操作

      :cc                顯示詳細(xì)信息 ( :help :cc )

      :cp                跳到上一個(gè)結(jié)果 ( :help :cp )

      :cn                跳到下一個(gè)結(jié)果 ( :help :cn )

      :cl                列出所有結(jié)果 ( :help :cl )

      :cw                如果有結(jié)果列表,則打開quickfix窗口 ( :help :cw )

      :col               到前一個(gè)舊的結(jié)果列表 ( :help :col )

      :cnew              到后一個(gè)較新的結(jié)果列表 ( :help :cnew ) 


      可以把這些命令映射到快捷建方便使用

      ":nmap <F4> :cw<cr>

      ":nmap <F4> :cclose<cr>

      :nmap <F5> :cn<cr>

      :nmap <F6> :cp<cr>

         "把 f3 按鍵映射為在本目錄下文件里面搜索光標(biāo)下面的單詞

      if has("win32")

      " grep的設(shè)置

      :set grepprg=c:/git/bin/grep.exe\ -n

      "windows平臺(tái)用這個(gè)

      :nmap <F3> "*yw<cr>:grep <c-v> ./*<cr><esc>:cw<cr>

      else

      " linux 平臺(tái)用這個(gè)

      :nnoremap <F3> :grep <C-R><C-W> *<CR><esc>:cw<cr>

      endif


      可以使用下面這個(gè)顯示和隱藏quickfix窗口的函數(shù),這樣cw 和 cclose功能都映射到同一個(gè)按鍵了

      " 彈出和隱藏quickfix窗口

      " 來自http://vim./wiki/Toggle_to_open_or_close_the_quickfix_window

      function! QFixToggle()

        if exists("g:qfix_win")

          cclose

          unlet g:qfix_win

        else

          " copen 10

      cw

          let g:qfix_win = bufnr("$")

        endif

      endfunction

      let g:qfix_win = 1

      nmap <script> <silent> <F4> :call QFixToggle()<CR>



      參考http://vimcdoc./doc/quickfix.html


      這種quickfix的用法,vim內(nèi)部出了grep 還支持make和其他編譯工具的,可以參考vim的文檔

      --------------------------------------



      vim-multiple-cursors插件 “True Sublime Text style multiple selections for Vim”

      ======================================================

      https://github.com/terryma/vim-multiple-cursors

      允許同時(shí)選擇多個(gè)同名變量,同時(shí)修改。 參考上面主頁上面的動(dòng)畫演示。比較有意思的一個(gè)插件,


      可以用 git clone https://github.com/terryma/vim-multiple-cursors 把目錄復(fù)制下來,然后把a(bǔ)utoload 和 doc plugin目錄復(fù)制到vim目


      錄去使用就可以了。

      使用起來很簡單,在normal模式,把光標(biāo)移到一個(gè)變量名字上面,再不停的按 ctrl +n 就把相同名字的變量都選中了。然后使用vim的命令就


      可以編輯了。esc退回普通模式。



      commentary.vim 快捷注釋代碼插件

      ========================

      https://github.com/tpope/vim-commentary

      Commentary 可以幫你注釋代碼。在normal模式輸入gcc 即可將該行注釋(Commentary 會(huì)根據(jù)當(dāng)前的 filetype 使用.

      在visual 模式,額可以選擇多行,然后輸入 gc ,注釋掉整個(gè)選中內(nèi)容。

      再次敲擊 gcc 即可還原注釋。我把空格鍵作為注釋映射,下面這樣:


      nmap <space> gcc

      vmap <space> gc

      即在 normal 模式下,敲擊空格鍵可以注釋當(dāng)前行,在 visual 模式下,敲擊空格鍵可以注釋選中的內(nèi)容

      參考了 http:///2013/11/my-vim-configuration-plugin/的設(shè)置


      NERD Commente  另外一個(gè)輔助注釋代碼的插件

      ================================

      http://www./scripts/script.php?script_id=1218


      vim-expand-region 自動(dòng)擴(kuò)展選擇區(qū)域的插件

      ==================================

      https://github.com/terryma/vim-expand-region

      可以通過 +   _  按鍵來擴(kuò)大選擇區(qū)域。比如,比如光標(biāo)在單詞中間,按一下 +,就選中整個(gè)單詞,再+就選中單詞外層的括號(hào)里面內(nèi)容。等等,可以去上面主頁去看動(dòng)畫。我只想在visual模式才使用這個(gè)功能,他插件里面會(huì)自己做一下判斷你是否已經(jīng)映射了快捷鍵的,如果已經(jīng)有了,它就不在做nmap的普通模式的映射了。


      " 自動(dòng)擴(kuò)大選擇區(qū)域的插件,讓它只在visual 模式才使用+  _鍵盤映射 

      vmap + <Plug>(expand_region_expand)

      vmap _ <Plug>(expand_region_shrink



      YouCompleteMe

      ===========

      c/c++的最好用的自動(dòng)補(bǔ)全插件,基于clang的c/c++語法分析



       強(qiáng)烈推薦閱讀下面這篇文章,體會(huì) 重復(fù)命令和 組合命令用法。

       http://www.oschina.net/news/25882/why-they-are-using-vi

      為什么這些死腦筋們?cè)谟?nbsp;VI ?

       

      翻譯的還好,也許你要原版的。

      Why, oh WHY, do those #?@! nutheads use vi?

      http://www./a-why-vi-vim.html

       

      后來也參考了

      技巧:快速提高 Vi/Vim 使用效率的原則與途徑

      http://www.ibm.com/developerworks/cn/linux/l-cn-tip-vim/ 


      vim的官方文檔,可以用去看一下。不錯(cuò)的,詳細(xì)的說明。

      http://vimdoc./htmldoc/usr_toc.html

       不過好像http://www./vim/vimbook-OPL.pdf   這個(gè)更有條理一些,講的很詳細(xì),而且例子也不錯(cuò),也將很多編程相關(guān)的高級(jí)用法等。我也參考了一下這個(gè)書。


      之前發(fā)的一個(gè)圖也是很好的參考。

      http://hiphotos.baidu.com/widebright/pic/item/5d880d241eb39b40c89559a6.jpg

      原來圖是來自這里的啊 

      Graphical vi-vim Cheat Sheet and Tutorial  

       http://www./a_vi_vim_graphical_cheat_sheet_tutorial.html

      這網(wǎng)站還有很多圖,給出由淺入深的學(xué)習(xí)步驟圖。


      不錯(cuò)的參考圖書

      Hacking Vim

      A cookbook to get the most out of the latest

      Vim editor


      這個(gè)帖子提到的幾個(gè)用法也不錯(cuò)

      http:///questions/1218390/what-is-your-most-productive-shortcut-with-vim/1220118#1220118



      Best of Vim Tips

      http://www./vimtips.html


      Using vim as C/C++ IDE

      http://www./2014/using-vim-as-c-cpp-ide/

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多