Vim的一些使用技巧
vim中的操作
一、設置大小字符匹配不匹配
??? set ignorecase / set ic
??? set noignorecase /set noic
二、設置查找時高亮顯示與不顯示
??? set hlsearch? /set hls
??? set nohlsearch /set nohls
三、設置在查找過程中就顯示匹配點 與 在查找過程中不顯示匹配點
??? set incsearch / set is
??? set noincsearch / set nois
四、設置查找到結尾或開頭后停止? 與 查找到結尾后折回到文件開頭重新查找
?? set wrapscan / set ws
?? set nowrapscan /set nows
五、設置顯示行號
?? set number / set nu
?? set nonumber /set nonu
六、設置Tab鍵寬度
?? set ts =4
vim中的移動命令
? http://vcd.gro.clinux.org/doc/usr_03.html#usr_03.txt
一、向前移動一個詞
??? w? 3w? b? 2b (向前移動一個詞 / 向前移動三個詞 / 前后移動一個詞 / 向后移動二個詞)
??? e (移動到一個個單詞詞末)? ge(移動到前一個單詞末尾)
??? 移動詞的命令包括:w / W / e / E / b / B / ge / gE
二、移動到行首或行尾
??? "$" 命令把光標移動到當前行行尾。"^" 命令把光標移動到一行的第一個非空字符,而 "0" 命令則移到一行的第一個字符,
三、移動到一個指定的字符
?? 單字符查找命令是最有用的移動命令之一。"fx" 命令向前查找本行中的字符 x。
?? 可以在這個命令前面加計數前綴,所以,可以用 "3fl"
?"F" 命令用于向左查找:
?"tx" 命令與 "fx" 相似,但它只把光標移動到目標字符的前一個字符上。
四.移動到指定行:
?? "33G" 把你送到 33 行
?"G" 命令把光標移動到文件末。移動到文件首的命令是 "gg"。
?"50%" 移動到文件的中間,而 "90%" 移到差不多結尾的位置。
??? "H" 表示 "Home" (頭)移動到屏幕上方,"M" 表示 "Middle" (中)移動到屏幕中間 而 "L" 表示 "Last" (尾)移動到屏幕下方。
五、滾屏
? CTRL-U 命令向下滾動半屏? CTRL-D 命令把視窗向下移動半屏
?每次滾一行的命令是 CTRL-E (上滾) 和 CTRL-Y (下滾)。
設置vim的選項
?? 如果每次用 Vim 都要設置一些選項,如是否大小寫匹配,顯示行號.那么,你可以把這些命令寫到Vim 的啟動文件中。
? 用:scriptnames來查找vim啟動文件在什么地方.
? 然后:edit ~/.vimrc
? 在這個文件中就可以設置一些選項了.
?
vim中使用標記
一、當你用 "G" 命令跳到另一個地方,Vim 會記住你從什么地方跳過去的。這個位置成為一個標記,要回到原來的地方,使用如下命令:``
?`` 命令可以在兩個位置上跳來跳去。而 CTRL-O 命令則跳到一個 "較老" 的地方 (提示: O 表示 older)。CTRL-I 則跳到一個 "較新" 的地方
?:jumps 命令能輸出一個你可以跳往的位置的列表。最后一個你使用的標記會用 ">" 符號標記出來。
二、Vim 允許你在文本中放置自定義的標記。命令 "ma" 用 a 標記當前的光標位置。你可以在文本中使用 26 個標記 (a 到 z)。這些標記是不可見的,只是一個由 Vim 記住的位置。
??? 要跳到一個你定義的標記,可以使用命令 `{mark},這里 {mark} 是指定義標記的那個字母。所以,移到標記 a 的命令是: `a
三、你可以用如下命令取得所有的標記的列表::marks
到有一些特殊的標記,包括:
??????? '?????? 跳轉前的光標位置
??????? "?????? 最后編輯的光標位置
??????? [?????? 最后修改的開始位置
??????? ]?????? 最后修改的結束位置
?
vim中的操作符與動作
一、 操作符-動作模式
"dw" 命令刪除一個單詞。你可能認出來了,"w" 是詞移動命令。實際上,"d" 命令后面可以跟任何 "動作" (motion) 命令,它會刪除從當前位置到光標移動到的目標位置的全部內容。
?以上定義了一個命令組合模式:操作符-動作。你首先輸入一個操作符命令,例如,"d"就是一個刪除操作符。然后你輸入一個動作命令,例如 "4l" 或者 "w"。這種方法使你可以在任何你能越過的文本上執行各種操作。
?另一個操作符命令是 "c",表示修改,change。它的作用方式與 "d" 操作符相似,只是完成后會切換到插入模式。例如,"cw" 修改一個詞,更精確的說,它刪除一個詞,并切換到插入模式。
??????? To err is human
?????????? ------->
???????????? c2wbe<Esc>
??????? To be human
這里 "c2wbe<Esc>" 包括如下操作:
??????? c?????? 修改操作符
??????? 2w????? 移動兩個單詞的距離 (與操作符合起來,它刪除兩個單詞并進入插入模式)
??????? be????? 插入 be 這個單詞
二、更 多 的 修 改 命 令
像 "dd" 可以刪除一行一樣,"cc" 修改一整行。但它會保留這一行的縮進 (前導空格)。
"d$" 刪除到行尾;"c$" 則修改到行尾。
命令 "3dw" 和 "d3w" 都是刪除 3 個單詞。如果你非要尋根問底,那么:"3dw" 表示刪除一個單詞 3 次,而 "d3w" 表示刪除三個單詞一次。這是一個沒有分別的分別。實際上你可以放兩個計數前綴,例如,"3d2w" 刪除兩個單詞三次,共計六個單詞。
三、重復一個修改
"." 是 Vim 中一個非常簡單而有用的命令。它重復最后一次的修改操作。例如,假設你在編輯一個 HTML 文件,你想刪除所有的 <B> 標記。你把光標移到第一個 "<" 上,然后用 "df>" 命令刪除 <B>。然后你就可以移到 </B> 的 < 上面用 "." 命令刪除它。"."
命令執行最后一次的修改命令 (在本例中,就是 "df>")。要刪除下一個 <B> 標記,移動到下一個 < 的位置,再執行 "." 命令即可。
????????????????????????????? To <B>generate</B> a table of <B>contents
??????? f<?? 找第一個 <?????? --->
??????? df>? 刪除到 >??????????? -->
??????? f<?? 找下一個 <??????????? --------->
??????? .??? 重復 df>?????????????????????? --->
??????? f<?? 找下一個 <??????????????????????? ------------->
??????? .??? 重復 df >????????????????????????????????????? -->
"." 命令重復任何除 "u" (撤銷),CTRL-R (重做) 和冒號命令外的修改。
再舉一個例子:你想把 "four" 修改成 "five"。有好幾個地方都要作這種修改。你可以
用如下命令快速完成這個操作:
??????? /four<Enter>??? 找到第一個 "four"
??????? cwfive<Esc>???? 修改成 "five"
??????? n?????????????? 找下一個 "four"
??????? .?????????????? 重復修改操作
??????? n?????????????? 找下一個 "four"
??????? .?????????????? 重復修改
??????????????????????? 如此類推......
四、可視模式
?要刪除一些簡單的東西,用 "操作符-動作" 命令可以完成得很好。但很多情況下,并不容易確定用什么命令可以移到你想修改的地方。這時候,你就需要可視模式了。
?你可以用 "v" 命令啟動可視模式。你可以移動光標到需要的地方。當你這樣做的時候,中間的文本會被高亮顯示。最后執行一下 "操作符" 命令即可。
?按 行 選 擇
?如果你想對整行做操作,可以使用 "V" 命令來啟動可視模式。你會發現在你作任何移動之前,整行都被高亮顯示了。左右移動不會有任何效果。而通過上下移動,你可以一次選擇多行。
??? 例如,用 "Vjj" 可以選中三行:
vim中的拷貝
一、copy and past
? 要把文本從一個地方拷貝到另一個地方,你可以先刪除它,然后用 "u" 命令恢復,再用"p" 拷到另一個地方。這里還有一種簡單的辦法:抽出 (yank)。"y" 命令可以把文字拷貝到寄存器中。然后用 "p" 命令粘貼到別處。
??? yanking 是 Vim 中拷貝命令的名字。由于 "c" 已經被用于表示 change 了,所以拷貝 (copy) 就不能再用 "c" 了。但 "y" 還是可用的。把這個命令稱為 "yanking" 是為了更容易記住 "y" 這個鍵。
? 由于 "y" 是一個操作符,所以 "yw" 命令就是拷貝一個單詞了。當然了,計數前綴也是有效的。要拷貝兩個單詞,就可以用 "y2w"
?"yy" 命令拷貝一整行,就像 "dd" 刪除一整行一樣。出乎意料地是,"D" 刪除到行尾而"Y" 卻是拷貝一整行。要注意這個區別!"y$" 拷貝到行尾。
?從剪貼板中copy和粘貼:
?? 要拷貝一行到剪貼板中:??????? "*yy
?要粘貼回來:??????? "*p
?以上僅在支持剪貼板的 Vim 版本中才能工作。更多的見:http://vcd.gro.clinux.org/doc/usr_09.html#09.3
vim中的文本對象
一、關于文本對象:
? 文本對象是作為一個整體來處理的。現在光標在對象中的位置無關緊要。
? 比如:aw 就代表光標所在處的一個文本對象,它是一個單詞.如:
?"daw" 的 "d" 是刪除操作符。"aw" 是一個文本對象。提示:"aw" 表示 "A Word" (一個單詞),這樣,"daw" 就是 "Delete A Word" (刪除一個單詞)。
?is表示inner sentence,表示光標所在的那行
?"cis" 包括 "c" (change,修改) 操作符和 "is" 文本對象。這表示 "Inner Sentence"(內含句子)。還有一個文本對象是 "as",區別是 "as" 包括句子后面的空白字符而 "is"不包括。如果你要刪除一個句子,而且你還想同時刪除句子后面空白字符,就用 "das";如果你想保留空白字符而替換一個句子,則使用 "cis"。
?你還可以在可視模式下使用文本對象。這樣會選中一個文本對象,而且繼續留在可視模式,你可以繼續多次執行文本對象命令。例如,先用 "v" 啟動可視模式,再用 "as" 就可以選中一個句子。現在重復執行 "as",就會繼續選中更多的句子。最后你可以使用一個操作符去處理這些被選中的句子。
?? 詳細的文本對象可見http://vcd.gro.clinux.org/doc/motion.html#text-objects:
簡單鍵盤映射
一、map命令:
? 映射可以使你把一系列 Vim 命令綁定為一個單獨的鍵。假設你要用一個大括號將一個特
定的單詞括起來。例如,把 "amount" 變成 "{amount}"。用 ":map" 命令,就可以讓 F5
來完成這個工作。命令如下:
??????? :map <F5> i{<Esc>ea}<Esc>
?在輸入這個命令時,<F5> 要用四個字符表示。相似地,輸入 <Esc> 不是直接按<Esc> 鍵,而是輸入五個字符。
?比如,在寫cpp文件時,用<F5>鍵自動插入{},可以這樣鍵盤映射:
? :map <F5> i{<Enter><Enter>}<Esc>ki<Tab>
?再舉一例,鍵盤映射\i這個命令自動為單詞加上(),可以:
?:map \i? bi(<Esc>ea)<Esc>
?有了map命令,可以把常用到的命令作為鍵盤映射,用得時候直接調用快捷鍵即可.
? 還有一種map命令,對于可視模式的:vmap
? 如,給選中的文本加上<small></small>標簽,快捷鍵為Ctrl+S
?? :vmap <C-S> c<small><Esc>pa</small><Esc>
?? 或者::vmap <C-S> s<small><C-R>”</small><ESC>? //其中<C-R>"表示寄存器"
?? 取消鍵盤映射:vunmap <C-S>
?
一些其它命令:
*:讀取光標處的字符串,并且移動光標到它再次出現的地方。
#:和上面的類似,但是是往反方向尋找。
i:在當前字符的左邊插入
I:在當前行首插入
a:在當前字符的右邊插入
A:在當前行尾插入
o:在當前行下面插入一個新行
O:在當前行上面插入一個新行
VIM 有一個非常漂亮的關鍵詞自動完成系統。這表示,你可以輸入一個長詞的一部分,然后按一下某個鍵,然后 VIM 就替你完成了這個長詞的輸入了。舉個例子:你有一個變量名為 iAmALongAndAwkwardVarName 在你寫的代碼的某個地方。也許你不想每回都自己一個一個字母的去輸入它。
使用關鍵詞自動完成功能,你只需要輸入開始幾個字母(比如 iAmAL),然后按 <C-N>(按住 Ctrl,再按 N)或者 <C-P>。如果 VIM 沒有給出你想要的詞,繼續按,直到你滿意為止,VIM 會一直循環它找到的匹配的字符串。
用 VIM 寫代碼
p:和 p 的功能差不多,但是它會自動調整被粘貼的文本的縮進去適應當前代碼的位置。試一下!
%:匹配花括號、方括號、括號等。在一個括號的上面,然后按 %,鼠標就會出現在匹配的另外一半括號處。
>>:縮進所有選擇的代碼
<<:和上面類似,但是反縮進
gd:到達光標所在處函數或者變量的定義處。
K:在 Man 里面查找光標當前所在處的詞。
顯示Tab鍵:
文件中有 TAB 鍵的時候,你是看不見的。要把它顯示出來:
??????? :set list
控制Tab的顯示樣式:
? :set listchars=tab:>-,現在,TAB 會被顯示成 ">---"
???? :set listchars=tab:-. 現在,TAB 會被顯示成 "-..."
??? 以上以此類推,Tab的顯示樣式需要兩個符號來控制.
設置詳細的listchars可以詳見:help 'listchars
設置文件的類別:
?? set filetype=cpp / set ft=perl
設置語法高亮:
? ?要在當前緩沖區中使用高亮,需要設置 'syntax' 選項:
??????? :set syntax=ON
?如果你想只對特定的文件采用語法高亮,可以使用這個命令:
??????? :syntax manual
?如果你要完全關閉這個功能:
??????? :syntax off
?使用色彩顯示文本會影響效率。如果你覺得顯示得很慢,可以臨時關掉這個功能:
??????? :syntax clear
?
使用不同顏色
?:colorscheme evening
"evening" 是色彩方案的名稱。還有幾種備選方案可以試一下。在 $VIMRUNTIME/colors
中可以找到這些方案。
?
轉載于:https://www.cnblogs.com/shipfi/archive/2007/06/06/773980.html
總結
以上是生活随笔為你收集整理的Vim的一些使用技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统搜索功能不能使用,弹出“无法找到运行
- 下一篇: 日期類型的定義6/14