表示按住Ctrl后按v鍵;下面的配置中,表示按住Alt后按t鍵;我在說明中提到的“前”,一般的意思是“右或者下”,“后”的意思一般是“左或者上”;我提到的“字”一般表示一" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

一些vim技巧和經(jīng)驗

系統(tǒng) 2178 0

http://www.imtxc.com/blog/2012/04/25/vim-tips-and-experience/

首先明確一些環(huán)境和一些術(shù)語說明:
我所使用的是Debian Linux上的vim7.3版本;
下面的配置中, <C 表示 Ctrl 鍵,比如 <C-v> 表示按住 Ctrl 后按 v 鍵;
下面的配置中, <M 表示 Alt 鍵,比如 <M-t> 表示按住 Alt 后按 t 鍵;
我在說明中提到的“前”,一般的意思是“右或者下”,“后”的意思一般是“左或者上”;
我提到的“字”一般表示一個英文字母或者一個漢字;
我提到的“詞”表示一個英文單詞,對于中文的話,被英文/標(biāo)點符號等隔開的就算一個詞而不是邏輯上的一個詞語。

一、基本操作篇

這部分的內(nèi)容,不需要使用額外的外掛和配置文件,事實上我覺得這也是使用Vim首先必須熟悉掌握的一些操作。

1.切換模式

                
                  1
                
              
                
                  
                    Esc C-
                    
                      [
                    
                     C-c i I o O a A v V <C-v> 
                  
                
              

這些是切換模式的鍵,可以從在Linux的各種模式之間切換。

  • Esc C-c C-[ 是從其他模式回到普通模式的操作,個人傾向 Esc ,因為左手小拇指力量太小,總覺得不舒服,因人而異了
  • i/a :在當(dāng)前提示符前/后插入
  • I/A :在vim中,大寫的命令其實可以分為對相應(yīng)的小寫字母代表的命令的作用進行反向或者對整行作用,這里的I/A命令,就是作用與整行,也就是在行首/末插入
  • o/O :在當(dāng)前行下/上行插入
  • v/V/<C-v> 是進入可視模式的命令,大寫V代表行選擇,代表塊選擇

2.重復(fù)命令

                
                  1
                
              
                
                  
                    . 
                    
                      [
                    
                    N
                    
                      ]
                    
                  
                
              

這兩個是非常重要的命令.

  • . 是重復(fù)執(zhí)行上一次的動作, [N] 代表一個數(shù)字,跟移動、編輯、選擇命令一起使用,可以更加快速的進行以上操作。

3.移動命令

                
                  1
                
              
                
                  
                    h j k l 0 ^ 
                    
                      $ 
                    
                    e E b B w W f F t ; , gg G H L M ENTER 
                    
                      [[
                    
                    
                      ]]
                    
                     % :
                    
                      [
                    
                    N
                    
                      ]
                    
                  
                
              

這些是Vim中的移動命令,就是在Normal模式下定位光標(biāo)位置。

  • j/ENTER :移動到下一行,需要移動到下N行的話,參考下面的 [N] 這一段。
  • k :上一行
  • h/l :左/右移一個字符
    ps: 這里其實 ENTER 命令基本不用,上下左右移動就用 hjkl 即可,很多人剛開始用 vim就是被這幾個“別扭”的鍵操作給嚇住,覺得很不適應(yīng),經(jīng)常使用習(xí)慣之后,你就會覺得這樣的設(shè)計是多么的優(yōu)秀了,為了幫助新手拋棄方向鍵(就是畫箭頭 的那四個鍵),我在下面的配置文件中進行了一點簡單的配置禁用了方向鍵,這樣可以加快新手熟悉Vim基本的鍵盤操作,但是這里先不提配置文件,在下面介紹 到的時候,我會進行說明。

  • 0 ^ , 這兩個命令都是把光標(biāo)移動到行首,有一點區(qū)別, ^ 是移動到本行的第一個可見字符,而 0 是移到整行的行首。
  • $ :定位到行末
  • e/b 往前/后移一個詞, e 命令移到到下個單詞后會定位到單詞的最后一個字符。
  • w 同樣往前移到一個單詞,移到到下個單詞的第一個字符
  • f/F 是快速的移動,f我這里理解成find的意思,比如在 this is a text line. 這樣的一行文本中,假設(shè)現(xiàn)在光標(biāo)所處的位置是a,那么我 fn ,就會定位到line這個單詞的n字符處,同理, F 就是逆向查找的意思了。
  • t 命令和 f 差不多,不過上還是上個例子,如果用 tn 的話,就會定位到line這個單詞的i字母處,也就是需要查找的前一個字符處。
  • ; 使用在上面的 f/t 命令后,如果需要查找下一個字符,就使用 ;
  • gg/G :跳到文件開始/末尾。
  • H/M/L :跳到當(dāng)前屏幕的頂部/中間/底部。
  • [[/]] :移動到上/下一個段落,在C程序中,一般是上/下一個函數(shù)。
  • % :用來跳到匹配的括號/引號等,甚至可以在對應(yīng)的條件編譯#if,#endif之間跳轉(zhuǎn)。
  • :[N] :跳到指定行號N的行。比如 :67 就會跳到第67行。
    移動命令中當(dāng)然還要提到跳轉(zhuǎn)命令 m ' ,其實也是移動命令
    這兩個命令是配合使用的,跳轉(zhuǎn)命令,也可以叫做marks命令,就是在文件的某些位置做上標(biāo)記然后方便以后回到這個位置繼續(xù)編輯, 比如在文件的某個位置使用 ma , 然后在文件的另一個位置 'a 之后就跳當(dāng)剛才使用 ma 記錄的位置。
    然而,最常使用的跳轉(zhuǎn)命令是:

  • ‘[ 跳到上一次被改變的文本的第一個字符
  • '. 跳到上一次文本被修改的地方
  • '' 跳回上一次跳轉(zhuǎn)的地方
  • '^ 跳到插入模式最后一次結(jié)束的地方
    這里提到的移動命令,很多可以和前面提到的重復(fù)命令 [N] 一起使用,比如 5j 表示向下移動5行, 5w 表示向前移動5個單詞等等。

4.編輯命令

                
                  1
                
              
                
                  
                    x X d y p P 
                    
                      "ayy "
                    
                    ap r R c o D C s S Y u C-r . << >> 
                  
                
              
  • x/X 是刪除當(dāng)前光標(biāo)下/光標(biāo)前的一個字符。
  • d/c/y 是刪除/修改/復(fù)制命令,之所以把這三個命令放在一組介紹是以為這三個命令都可以和前面介紹的移動跳轉(zhuǎn)等命令一起使用,比如 dd/yy 表示刪除/復(fù)制一行, dw/cw/yw 是刪除/修改/復(fù)制一個單詞, d$/c$/y$ 表示刪除/修改/復(fù)制到行末, d^/y^ 表示刪除/復(fù)制到行首,當(dāng)然,這些命令還可以和重復(fù)命令組合,比如 5dd 表示刪除5行, d/c/yfx 就是刪除/修改/復(fù)制到字符x,以此類推,還可以這樣使用的命令還有下面提到的 v 命令。
    靈活的組合前面介紹的這幾個命令,在寫代碼的過程中使用起來非常方便,比如:
  • df), yf), cf), vf) 從當(dāng)前字符開始刪除(復(fù)制,改變,選中),直到遇到=之后
  • di), yi), ci), vi) 刪除(復(fù)制,修改,選擇)括號內(nèi)的內(nèi)容
  • dt”, yt”, ct”, vt” 從當(dāng)前字符開始刪除(復(fù)制,改變,選中),直到遇到”之前
  • diw, yiw, ciw, viw 刪除(復(fù)制,改變,選中)光標(biāo)所在單詞
  • da”, ya”, ca”, va” 刪除(復(fù)制,改變,選中)””號內(nèi)所有文本,包括引號本身
    事實上刪除命令,在vim中就是剪切命令的意思。
  • p/P 命令,這兩個命令是粘貼的意思,分別表示在當(dāng)前字符的前/后粘帖前面使用y/d復(fù)制或者剪切的內(nèi)容。
    當(dāng)然,我們在使用的過程中,會遇到這樣的問題,分別在兩個地方刪除內(nèi)容,然后需要分別粘貼,這樣的情況就需要用到 "ayy "ap 這樣的命令了, "ayy 是把當(dāng)前行復(fù)制到名字為a的寄存器中, "ap 就是在這里粘帖a寄存器中的內(nèi)容。

5.查找/替換

從這里開始,就要介紹一種Vim中的另一種模式:命令模式,在Normal模式下輸入 : 就可以進入命令模式, Esc 返回普通模式。

  • / 向前查找
  • ? 向后查找
  • n 重做最后一次/或?
  • N 反方向重做最后一次/或?
  • \c 查找時忽略大小寫
  • \C 查找時大小寫相關(guān)
  • * 向前查找當(dāng)前光標(biāo)下的單詞
  • # 反方向查找當(dāng)前光標(biāo)下的單詞
    這里,查找和替換都可以配合正則表達式來使用。

6.記錄

                
                  1
                
              
                
                  
                    q @ 
                  
                
              

我理解的記錄,也就是宏的意思。 q命令在使用過程中需要使用兩次: 第一次表示開 始記錄,第一次按下q之后還需要輸入一個字符表示要把記錄的宏存到哪個位置,第二次表示記錄的結(jié)束。 q需要@配合使用。 @是讀取指定寄存器中的操作記錄,并將這些操作順序 地重新執(zhí)行一遍, 這里舉一個例子說明,輸入1到100的數(shù):

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
                
                  6
                
                
                  7
                
                
                  8
                
              
                
                  
                    i 
                  
                  
                    1 
                  
                  
                    <ESC> 
                  
                  
                    qa 
                  
                  
                    yyp 
                  
                  
                    <C-a> 
                  
                  
                    q 
                  
                  
                    100@a 
                  
                
              

7.多標(biāo)簽

在編輯多個文件的時候,使用多標(biāo)簽可以方便的在不同文件之間切換。

  • :tabnew 新建tab
  • :tabclose 關(guān)閉tab
  • :tabedit {file} 新建tab,并在新創(chuàng)建的tab打開file

  • gt 下一tab
  • gT 上一tab

8.多窗口

如果屏幕夠大的話,使用多個窗口來編輯文件要比多標(biāo)簽更舒服,比如我可以在寫.c文件的時候在旁邊用個窗口顯示對應(yīng)的.h文件的內(nèi)容。

  • :sp {file} 橫向切割窗口,并在新窗口打開file
  • :vsp {file} 豎向切割窗口,并在新窗口打開file
  • C-w w 命令在不同窗口之間切換,在后面的配置文件中,我會提到通過定義配置文件來更加方便的在多個窗口之間進行切換。

二、配置文件篇

這部分,是通過配置文件,對vim進行定制使得更加符合自己的編輯習(xí)慣,我的完整配置文件在 這里 ,這里對其中的部分進行說明。

關(guān)于備份文件的配置

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
              
                
                  
                    
                      set 
                    
                    backup 
                    
                      " Enable backup
                    
                  
                  
                    
                      set backupdir=~/.vim/backup "
                    
                     Set backup directory 
                  
                  
                    
                      set 
                    
                    
                      directory
                    
                    
                      =
                    
                    ~/.vim/swap,/tmp 
                    
                      " Set swap file directory
                    
                  
                  
                    
                      autocmd BufWritePre * let &backupext = strftime("
                    
                    .%m-%d-%H-%M
                    
                      ") "
                    
                     Keep more backups 
                    
                      for 
                    
                    one file 
                  
                
              

搜索模式里面的一些配置

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
              
                
                  
                    
                      set 
                    
                    magic 
                    
                      " Enable magic matching
                    
                  
                  
                    
                      set showmatch "
                    
                     Show matching bracets 
                  
                  
                    
                      set 
                    
                    hlsearch 
                    
                      " Highlight search things
                    
                  
                  
                    
                      set smartcase "
                    
                     Ignore 
                    
                      case 
                    
                    when searching 
                  
                  
                    
                      set 
                    
                    ignorecase 
                  
                
              

有用的鍵盤綁定

關(guān)于多標(biāo)簽和多窗口編輯的鍵綁定

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
                
                  6
                
                
                  7
                
                
                  8
                
                
                  9
                
                
                  10
                
              
                
                  
                    nnoremap tp :tabprevious<CR> 
                  
                  
                    nnoremap tn :tabnext<CR> 
                  
                  
                    nnoremap to :tabnew<CR> 
                  
                  
                    nnoremap tc :tabclose<CR> 
                  
                  
                    nnoremap gf <C-W>gf 
                  
                  
                    nmap <silent> <C-k> <C-W><C-k> 
                  
                  
                    nmap <silent> <C-j> <C-W><C-j> 
                  
                  
                    nmap <silent> <C-h> <C-W><C-h> 
                  
                  
                    nmap <silent> <C-l> <C-W><C-l> 
                  
                
              

F[N]鍵的綁定:

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
                
                  6
                
                
                  7
                
                
                  8
                
                
                  9
                
                
                  10
                
                
                  11
                
              
                
                  
                    nnoremap <silent> <F2> :TlistToggle<CR>:TlistUpdate<CR> 
                  
                  
                    nnoremap <F3> :Rgrep<CR> 
                  
                  
                    nmap <F4> :noh<cr><ESC> 
                  
                  
                    inoremap <F5> <C-R>
                    
                      =
                    
                    strftime
                    
                      (
                    
                    
                      "%Y-%m-%d %T %Z"
                    
                    
                      )
                    
                    <CR> 
                  
                  
                    nnoremap <F5> :w<CR>:make!<CR> 
                  
                  
                    nnoremap <F6> :w<CR>:make! %< 
                    
                      CC
                    
                    
                      =
                    
                    gcc 
                    
                      CFLAGS
                    
                    
                      =
                    
                    
                      "-Wall -g -O2"
                    
                    <CR>:!./%
                    
                      <<CR>
                    
                  
                  
                    
                      inoremap <F6> <ESC>:w<CR
                    
                    >:make! %< 
                    
                      CC
                    
                    
                      =
                    
                    gcc 
                    
                      CFLAGS
                    
                    
                      =
                    
                    
                      "-Wall -g -O2"
                    
                    <CR>:!./%
                    
                      <<CR>
                    
                  
                  
                    
                      nnoremap <silent> <F7> :botright copen<CR
                    
                    > 
                  
                  
                    nnoremap <silent> <F8> :cclose<CR> 
                  
                  
                    nnoremap <silent> <F9> :NERDTreeToggle<CR> 
                  
                  
                    nnoremap <silent> <F10> :set number!<CR> 
                  
                
              

禁用了方向鍵:

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
                
                  6
                
                
                  7
                
                
                  8
                
              
                
                  
                    map <UP> <NOP> 
                  
                  
                    map <DOWN> <NOP> 
                  
                  
                    map <LEFT> <NOP> 
                  
                  
                    map <RIGHT> <NOP> 
                  
                  
                    inoremap <UP> <NOP> 
                  
                  
                    inoremap <DOWN> <NOP> 
                  
                  
                    inoremap <LEFT> <NOP> 
                  
                  
                    inoremap <RIGHt> <NOP> 
                  
                
              

autocmd

autocmd,就是vim根據(jù)判斷文件格式自動執(zhí)行的一些命令,具體關(guān)于autocmd的配置,可以參考我的 完整配置文件 ,在配置文件中,對所有的配置都進行了注釋,有了前面這些命令和配置介紹的基礎(chǔ),應(yīng)該可以看明白并且根據(jù)自己的需要進行修改。

三、插件介紹篇

使用vim,就免不了用到一些外掛來增強功能,我使用vim主要是在Linux下編輯C、Makefile、Markdown等文件,因此我用到的插件列表是這些 這里對其中的部分插件進行介紹

1.Vundle

首先必須介紹的是Vundle插件,沒有用這個插件之前,管理vim的插件是一件很頭疼的事情,特別是安裝了某個插件但是試用后覺得不好用然后要刪 除那個插件的時候,總是很麻煩,經(jīng)過搜索,終于讓我找到了Vundle(Google又立功了), 當(dāng)然使用vundle插件你的系統(tǒng)中必須有g(shù)it環(huán)境,關(guān)于git我打算改天寫篇專門的筆記來記錄學(xué)習(xí)Git進行版本控制時總結(jié)的一些知識,事實上關(guān)于 Git,網(wǎng)絡(luò)上已經(jīng)有很多很好的資料介紹了。

安裝&配置:

                
                  1
                
              
                
                  
                    git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 
                  
                
              

然后在vimrc中添加如下內(nèi)容:

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
              
                
                  
                    
                      set 
                    
                    rtp+
                    
                      =
                    
                    ~/.vim/bundle/vundle/ 
                  
                  
                    call vundle#rc
                    
                      ()
                    
                  
                  
                    Bundle 
                    
                      'gmarik/vundle'
                    
                  
                  
                    Bundle 
                    
                      'vim-plugin-foo'
                    
                  
                  
                    Bundle 
                    
                      'vim-plugin-bar'
                    
                  
                
              

使用:
先在 vimrc 中添加需要安裝的插件比如: Bundle 'a.vim' , 然后 :BundleInstall 就可以安裝插件。
vimrc 中移除添加的插件,然后 :BundleClean 就可以刪除對應(yīng)的插件,下面介紹到的插件都使用這種方式安裝。

2.SnipMate&SuperTab-continued

這組插件用來自動補全一些內(nèi)容,在寫代碼的時候非常方便使用。 使用:輸入某些文本(在snipmate插件中進行定義)內(nèi)容后,按 tab 就可以補全,比如在C語言代碼文件中可以補全的有main, if, inc, Inc, for等等。

3.DoxygenToolkit&The-NERD-Commenter

這一組插件來給代碼文件添加注釋。
配置:

                
                  1
                
                
                  2
                
                
                  3
                
                
                  4
                
                
                  5
                
                
                  6
                
                
                  7
                
                
                  8
                
                
                  9
                
                
                  10
                
              
                
                  
                    
                      let 
                    
                    g:DoxygenToolkit_authorName
                    
                      =
                    
                    
                      "Vortex - txc DOT yang AT gmail DOT com"
                    
                  
                  
                    
                      let 
                    
                    g:DoxygenToolkit_briefTag_funcName
                    
                      =
                    
                    
                      "yes"
                    
                  
                  
                    
                      let 
                    
                    s:licenseTag 
                    
                      =
                    
                    
                      "Copyleft(C)\<enter>"
                    
                  
                  
                    
                      let 
                    
                    s:licenseTag 
                    
                      =
                    
                     s:licenseTag . 
                    
                      "For free\<enter>"
                    
                  
                  
                    
                      let 
                    
                    g:DoxygenToolkit_licenseTag 
                    
                      =
                    
                     s:licenseTag 
                  
                  
                    
                      let 
                    
                    g:doxygen_enhanced_color
                    
                      =
                    
                    1 
                  
                  
                    map <leader>da :DoxAuthor<CR> 
                  
                  
                    map <leader>df :Dox<CR> 
                  
                  
                    map <leader>db :DoxLic<CR> 
                  
                  
                    map <leader>dc a /* */<LEFT><LEFT><LEFT> 
                  
                
              

使用:
在函數(shù)名稱上面 ,df 為改函數(shù)添加函數(shù)頭注釋
,da 可以添加文件頭,其中的信息在上面的配置文件中修改
,cc 注釋當(dāng)前行
,cs 更性感的方式注釋代碼區(qū)域
,cu 取消注釋
,cA 在不同的注釋風(fēng)格之間切換

4.repeat.vim&surround.vim

這一組插件用來重復(fù)一些操作,是 . 命令的加強版,具體的使用可以查看各自插件的文檔,都有很詳細的例子。

5.vim-powerline

非常漂亮的狀態(tài)欄定制插件,安裝即可.

6.transpose-words

可以實現(xiàn)類似Emacs中 M-t 那樣交換單詞的插件。
使用方法:比如在類似 a = b 這樣的文本的任意位置按 M-t 就可以修改為 b = a .


上面這些配置和插件,是我在使用Vim過程中總結(jié)的一點知識,記錄在這里方便遺忘的時候查閱也供同樣跟我一樣剛開始學(xué)習(xí)Vim的朋友們參考。

參考文章: vim入門進階與折騰

一些vim技巧和經(jīng)驗


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久久在线视频精品免费观看 | 亚洲欧美日韩高清一区二区三区 | 国产成人黄色在线观看 | 四虎永久影院 | 九九热中文字幕 | 国产黄色91 | 国内精品视频在线观看 | 免费视频一级片 | 久久青草社区 | 四虎影视永久在线精品免费 | 亚洲人人爱 | 激情影院费观看 | 国产色婷婷精品综合在线手机播放 | 99久久精品视香蕉蕉er热资源 | 一级不卡毛片免费 | 99re这里只有精品在线观看 | 久青草资源福利视频 | 国产精品suv一区二区 | 欧美精品影院 | 亚洲欧美中文字幕在线网站 | 一级女性全黄生活片免费看 | 久久黄色小视频 | 亚洲码在线 | 免费播放毛片 | 久久九九精品一区二区 | 欧美日韩视频在线成人 | 亚洲图片一区二区 | 亚洲国产精品二区久久 | 国产亚洲欧美在线 | 日本不卡高清中文字幕免费 | 日韩欧美综合在线 | 四虎影视在线影院在线观看观看 | 亚洲精品乱码久久久久久蜜桃 | 阿v视频在线观看免费播放 阿v天堂2017 | 久久99这里只有精品 | 视频一区二区欧美日韩在线 | 久热精品在线视频 | 中文字幕久久综合伊人 | 欧美成人午夜免费完成 | 99热在线观看| 久久精品影视 |