VIM编辑器使用技巧
?轉(zhuǎn)載自:http://blog.chinaunix.net/uid-20672257-id-3139059.html
?
在Vim中設(shè)置tab
在 Vim 中可以很方便的根據(jù)不同的文件類型來設(shè)置使用 tab 制表符或者空格,還可以設(shè)置長度,非常靈活。
首先來看如何設(shè)定 tab 的寬度以及如何確定用 tab 制表符還是空格來表示一個縮進:
在自己的家目錄下建立.vimrc文件(修改好后運行一下source ~/.vimrc使用配置文件生效)
然后輸入
??? set tabstop=4
??? set softtabstop=4
??? set shiftwidth=4
??? set noexpandtab / expandtab
其中 tabstop 表示一個 tab 顯示出來是多少個空格的長度,默認 8。
softtabstop 表示在編輯模式的時候按退格鍵的時候退回縮進的長度,當(dāng)使用 expandtab 時特別有用。
shiftwidth 表示每一級縮進的長度,一般設(shè)置成跟 softtabstop 一樣。
當(dāng)設(shè)置成 expandtab 時,縮進用空格來表示,noexpandtab 則是用制表符表示一個縮進。
?
Vim全文的搜索
鍵入/后,光標(biāo)進入VIM底部的命令行,這時就可以輸入以/為開始的/搜索命令了。
1. 最簡單的查找。輸入/string就可以查找string字符串。
2. 繼續(xù)查找。在第一次搜索后輸入n將會繼續(xù)進行上一次搜索,如果輸入3n那么會找到后面第三個符合的字符串。大寫的N會在反方向,也就是向上進行搜索。
3. 向上搜索。輸入?可以向上搜索。隨后的n命令將會繼續(xù)向上搜索,N向下搜索,其他和/一樣。
4. 對大小寫的匹配。
4.1. 在命令行輸入:set ignorecase可以設(shè)置搜索以忽略大小寫的方式進行。輸入:set noignorecase可以設(shè)置搜索以匹配大小寫的方式進行。默認的,將匹配大小寫。這個默認設(shè)置可以在.vimrc中修改。
4.2. 大小寫智能匹配模式。輸入命令:set ignorecase smartcase可以設(shè)置為智能大小寫匹配模式。在這種模式下,如果你輸入的字符串中至少包含一個大寫字母,那么就會以大小寫敏感模式進行搜索,否則以忽略大小寫模式進行搜索。
4.3. 在搜索命令中指定大小寫。在幾種大小寫搜索模式中進行轉(zhuǎn)換總要輸入長長的一串指令,如果需要不斷地轉(zhuǎn)換模式,確實有些麻煩。所以你可以直接在搜索命令中指定大小寫匹配模式。\c表示忽略大小寫,而\C表示對大小寫敏感。
5. 查找當(dāng)前詞。一個簡單的方法可以讓你查找下一個和當(dāng)前詞一樣的詞,你不比輸入/currentword,你可以直接按下*就可以查找下一個currentword。#可以讓你向上查找同一個單詞。
6. 調(diào)整查找后的光標(biāo)位置。
6.1. 使用/string/3會使在光標(biāo)轉(zhuǎn)到找到string字符串的行下面的第3行。第1行從包含string的行算起。同樣可以使用/string/-2來使光標(biāo)停留在包含string的行的前面2行。
6.2. 使用/string/e可以使光標(biāo)停留在string字符串的末尾而不是默認的第一個字符位置。/string/b則表示停留在string第一個字符的 位置,不過默認就是如此,我們不比多此一舉。但是/string/b+2卻可以使光標(biāo)停留在string字符串的第二個字符的位置,這里是r。在e或者b 的后面+或者-數(shù)字,可以進一步調(diào)整光標(biāo)的位置。
7. 特殊字符。在搜索命令中,? .*[]^%/?~$這10個字符有著特殊意義,所以在使用這些字符的時候要在前面加上一個反斜杠/。而\e表示<esc>;\t表示<tab>;\r表示<cr>;\b表示<bs>。
8. 匹配換行或空格。使用\n可以表示一個換行;而\s表示匹配空白,注意是空白不是空格。\_s表示匹配換行或者空格;\_a表示匹配換行或者一個字母。比 如:/the\nword查找以the結(jié)束并且下一行以word開始的行的位置。/the\_sword查找the和word之間以空白或者換行分割的位 置。/the\_s\+word表示the和word之間可以有多個空白。\+的含義可以在后面找到。
9. 限定詞首或者詞尾。\<可以限定找到是以指定字符串開始的單詞。比如/\<the可以找到以the開始在字符串,但是會忽略在單詞中間包含the的字符串。而\>則是限定必須是以指定字符串結(jié)尾的單詞。
10. 行首和行尾。輸入/^string查找以string開始的行,并且光標(biāo)停留在這個string的第一個字符。輸入/string$則查找以string結(jié)束的行,并將光標(biāo)停留在這個string的第一個字符。這個模式不會忽略前導(dǎo)或者后置的空格。
11. 匹配任何一個字符。句號.可以匹配任何一個字符。例如/t.e可以找到the或者tae或者tue。
?
Vim搜索并替換
輸入:[range]s/from/to/[flags]命令可以搜索匹配的字符串并且替換為指定的字符串。這是一個稍微復(fù)雜的命令。其中 [range]是一個可選項,用來指定搜索替換的范圍。[flags]也是一個可選項,用來指定搜索替換的處理方式。所以這個命令的簡單形式是:s/from/to/。
1. 搜索替換的范圍。如果沒有指定范圍,則只在當(dāng)前行進行搜索替換。
1.1. 在所有行進行搜索替換。范圍符號%表示在所有行進行搜索替換。:%s/from/to/就是在全文查找from并替換為to。
1.2. 在指定的行上進行搜索替換。:1,50s/from/to/表示在第1行和第50行之間(包括1和50行)進行搜索和替換。:45s/from/to/表示僅僅在第45行進行搜索和替換。而”1,$”行號范圍和“%“是等價的。
2. 處理方式。我現(xiàn)在使用的VIM默認的方式是無須確認。不過好像不同版本的默認的處理方式是不同的。
2.1. 無須確認。方式符號g表示直接替換無須進行確認。:%s/from/to/g表示在全文中查找from并且直接全部替換為to。
2.2. 列印。處理方式符號p表示在替換時列出每個被改變的行。手冊中這么說,但是實際效果卻讓我很迷惑。
2.3. 確認后處理。處理方式符號c表示在進行替換前需要用戶進行確認。這時你可以選擇(y/n/a/q/1/^E/^Y):y表示同意當(dāng)前替換;n表示不同意當(dāng)前替換;a表示替換當(dāng)前和后面的并且不再確認;q表示立即結(jié)束替換操作;1表示把當(dāng)前的替換后結(jié)束替換操作;^E向上滾屏^Y向下滾屏,用來幫助查看前后內(nèi)容以決定進行操作。
?
VIM編輯數(shù)個文件
:args 顯示編輯名單中的各個文件名
:n? ?? ? 讀入編輯名單中的下一個文件
:rew? ? 讀入編輯名單中的第一個文件
:e# 讀入編輯名單內(nèi)的前一個文件
:e file? ? 讀入另一個文件進vi(此文件可不在編輯名單內(nèi)),若原文件經(jīng)修改還沒有
存檔,則應(yīng)先以: w 存檔。
:e! file 強迫讀入另一個文件進入vi,原文件不作存檔動作。
示例1,單個切換
vi file1 file2 file3
:n 切換到文件2 (n=next)
:e# 或 :N? ? 切換回到剛才編輯的文件
比如當(dāng)前編輯文件為a,:n跳至b,再:n跳至c,:e#回到b,想回到a的話用:e a
或者直接輸入:e a, :e b, :e c,在三個文件間切換
示例2,分屏切換
打開一個,vi 文件名
然后在vi的命令輸入狀態(tài)下輸入
:sp 另外一個文件的路徑及文件名,如此就可以在一個窗口打開多個文件了。
或者用 vi -o file1 file2 file3....用分割屏幕窗口方式同時打開多個文件。
可以使用 ctrl 加兩次按 w 或者ctrl + w 然后按上下鍵在上下窗口間切換。
VIM復(fù)制粘貼
1在多個文件間復(fù)制粘貼內(nèi)容
vi多文件時,文件之間的拷貝復(fù)制只能通過命名緩存進行
如
"a3yy??把3行內(nèi)容復(fù)制到命名為a的緩沖區(qū)
(此時,不是輸入冒號,而是輸入“a3yy)
"ap 把名字為a的緩沖區(qū)內(nèi)容拷貝到當(dāng)前位置
(此時,不是輸入冒號,而是輸入“ap)
在vi下使用
:new newfile,就可以打開多個文件進行編輯,使用ctl+w進行切換;
dd:刪除一行
:vnew可以橫著打開文件
2多方搜索整理如下:(除特殊說明以下操作均在命令模式下)
1.
將光標(biāo)移動到將要復(fù)制的行處,按yy進行復(fù)制當(dāng)前行(按nyy復(fù)制n行),再移動到粘貼位置,按p進行粘貼。
2.
將光標(biāo)移到復(fù)制的首位置,按下v,用hjkl移動,按y復(fù)制,按p粘貼。
3.
光標(biāo)移到起始行,輸入ma;光標(biāo)移到結(jié)束行,輸入mb;光標(biāo)移到粘貼行,輸入mc;然后 :'a,'b co 'c,把 co 改成 m 就成剪切了。
4.
光標(biāo)移動到要復(fù)制的行,輸入yny(n表示要復(fù)制該行以下n行);光標(biāo)移動到粘貼行,按p粘貼。
5.
直接輸入:n1,n2 co n3。(n1為起始行,n2為結(jié)束行,n3為粘貼行)
6.
不同文件之間的復(fù)制:用:sp [filename]打開另一文件,(用^ww在文件之間切換),然后按上述方法復(fù)制
有關(guān)的命令如下:
yy ?將當(dāng)前行復(fù)制到緩沖區(qū)
yw ?將當(dāng)前單詞復(fù)制到緩沖區(qū)
y1 ?將光標(biāo)處的一個字符復(fù)制到緩沖區(qū)
p ? 將緩沖區(qū)的信息粘貼到光標(biāo)的后面
:行號1 ,行號2 copy 行號3 ? ?將行號1到行號2的內(nèi)容復(fù)制到行號3所在行的后面。
:行號1 ,行號2 move 行號3 ? ?將行號1到行號2的文本內(nèi)容移動到行號3所在行的后面。
VI撤消與重復(fù)編輯操作
a) ? 撤消上一個編輯操作。 ? ? ? ====》 ? U?
b) ? 重復(fù)上一個編輯操作。 ? ? =====> ? ? .?
c) ? 還原被撤消的編輯操作。 ? ======> ? Ctrl+R?
". "命令可以重復(fù)最近一次的編輯動作.
轉(zhuǎn)載于:https://blog.51cto.com/noworry/1104463
總結(jié)
以上是生活随笔為你收集整理的VIM编辑器使用技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《架构之美》摘录四
- 下一篇: 微软MCITP系列课程(一)第一讲:部署