vim FAQ

Linux /linuxman?發表于2004-12-06 23:57
轉自水木清華:VIM FAQ
轉貼如下:
(1)?為什么別人的方法在我這里行不通?
(2)?如何找到上次編輯的文件?
(3)?如何復制粘貼?
(4)?如何在多個文件中進行替換?
(5)?如何把fold一次全部打開?
(6)?如何選擇、復制或者查找光標所在的單詞?
(7)?如何計數搜索的字符串?
(8)?如何去掉高亮搜索?
(9)?如何解決linux下gvim中文菜單亂碼的問題?
(10)?如何對所編輯的文件語法高亮顯示?
(11)?如何快速插入多行數字0-99?
(12)?如何設置中文編碼?
(13)?如何去掉或者插入^M這樣的字符?
(14)?如何整體縮進一段代碼(插入tab)?
(15)?如何合并兩行?
(16)?如何設置縮進距離(tab寬度)?
==============================================================================
(1)?為什么別人的方法在我這里行不通?
估計這是最難回答的一個問題了。:-)
不過首先應該確定你的VIM版本是否足夠新,功能是否完整。使用?:version?命令查看你
的VIM版本以及功能。一個常見的情況,如果你用的是RedHat系統,請確定安裝了
vim-enhance的rpm包,否則將是不完整的VIM。
(2)?如何找到上次編輯的文件?
Ctrl+O?(按兩次)
(3)?如何復制粘貼?
復制
方法一:先ma標記當前位置為a,移動到新的位置,再y`a或者y''a復制從標記位置a到
當前位置的內容。`和''的區別:`以字符為單位,''以行為單位。這個方法應該是所有vi
都適用的。(如果不對請指正。)
方法二:按v或V或Ctrl+V進入visual模式,移動光標選擇一段內容,按y。三者的區別:
v以字符為單位,V以行為單位,Ctrl+V是塊選擇。這個方法只在VIM下適用。
粘貼
p或P。區別:前者粘貼到光標后面,后者粘貼到光標前面。
(4)?如何在多個文件中進行替換?
一般可以用sed或者vim來做。比如要對當前目錄下的*.c文件進行替換:
方法一:
for?i?in?*.c;?do
??sed?-i?-e?''s/oldvalue/newvalue/g''?$i
done
方法二:
vim?*.c
:argdo?%s/oldvalue/newvalue/g
(5)?如何把fold一次全部打開?
zR?或者?:set?foldlevel=999
(6)?如何選擇、復制或者查找光標所在的單詞?
在VIM中用iw或者aw表示一個單詞,兩者稍有區別。
選擇光標所在的單詞:viw?(v進入visual模式,然后iw)
復制光標所在的單詞:yiw
查找的話就是兩個很常用的明令:#?和?*
(7)?如何計數搜索的字符串?
如果需要統計緩沖中一個模式(pattern)出現的頻率,需要把?''report''?置為0,然后
用替換命令把模式替換成它自己。Vim?報告的已替換的數目就是模式出現的次數。例:
????????:set?report=0
????????:%s/./&/g???????????????characters
????????:%s/i+/&/g????????????words
????????:%s/^???????????????????lines
????????:%s/the/&/g?????????????"the"?anywhere
????????:%s/<the>/&/g?????????"the"?as?a?word
你可能希望復位?''hlsearch''?或者使用?":nohlsearch"。
(8)?如何去掉高亮搜索?
方法一::nohlsearch
方法二:/awertgvcxz?(查找一個肯定不存在的字符串)
設置了高亮搜索(:set?hlsearch)以后,可以通過?:set?nohlsearch?永久地關閉高亮
顯示,也可以通過?:nohlsearch?暫時關閉高亮顯示,下次搜索時將自動恢復高亮。
(9)?如何解決linux下gvim中文菜單亂碼問題?
以vim6.3為例
:source?$VIMRUNTIME/delmenu.vim
:source?$VIMRUNTIME/menu.vim
也可以將以上內容加入.vimrc
光source一個menu.vim或者啥也不source都是亂碼
另外,也有網友報告說沒有遇到此類問題
注:這里的source指的是vim自己的source命令,和bash?shell的source無關
(10)?如何對所編輯的文件語法高亮顯示?
需要解釋的是,VI有很多變種,它本身并沒有這種功能,提供這種功能
往往是其各種衍生版本,比如說vim。下面就vim中如何語法高亮簡單解釋一下。
首先,確定一下你所用的操作系統,如果是windows,那么默認的配置文件
就可以工作了。如果還不行,可以用鼠標從syntax菜單下選擇一下適合你的
文件類型(新版本的gvim默認把文件類型選擇關閉了,需要點開,然后按照
開頭字母選擇類型)
如果是linux,那么確認一下是否是redhat。如果是redhat,那么需要安裝
vim-enhanced的rpm包。這些都做了以后,可以用:syntax?on來打開語法高亮。
必要時可以用:set?filetype=...來設定你的文件類型。
如果使用圖形界面,比如gvim,那么syntax?on和set?filetype的操作可以
用鼠標在菜單中選擇,同windows下。
如果是在控制臺中使用vim,還應當確定你的終端設置支持顏色。
(11)?如何快速插入多行數字0-99?
在命令行中輸入以下代碼,或者先把代碼保存到一個外部文件,然后source這個文件:
let?i?=?0
while?i?<?100
??put?=?i
??let?i?=?i?+?1
??endw
如果位數不足需要在前面補零,可以用Ctrl-V塊選擇,然后I插入0。
(12)?如何設置中文編碼?
在.vimrc中作如下設置,可以實現界面以及顯示字體采用gb2312,遇到utf8文件時
自動做轉換:
set?encoding=prc
set?fileencoding=prc
set?fileencodings=utf8,prc
需要注意的是,按照上面的設置,如果你打開一個空的(0字節)或者是純7bits的文件,
這時VIM將認為是utf8編碼的文件,如果你往里面輸入中文,存盤的時候也將是utf8。
因此你可能需要在存盤之前?:set?fileencoding=prc?把編碼改回來。
另外,對于純7bits的文件,由于認成了utf8,每次打開存盤的時候都要做一次轉換,
會比較慢,所以如果你很長一段時間不會接觸utf8的話,可能暫時把?fileencodings
一行注釋掉比較好。
[警告]:轉換可能會造成信息丟失!如果你需要編輯的是重要的系統文件,最好把
fileencodings?一行暫時注釋掉。
(13)?如何去掉或者插入^M這樣的字符?
在VIM的插入模式或者命令行中用<C-V>輸入^M這樣的特殊字符,例如輸入
:s/<C-V><C-M>//g
實際顯示是
:s/^M//g
就可以去掉文件中所有的^M。同理,要在文件中輸入^M只要按<C-V><C-M>即可。
這個問題往往發生在WINDOWS/DOS系統和UNIX系統之間交換文件時,因為這兩類系統
對于文本的“換行”概念解釋不同。所以,還有一個解決方法就是對這類文本進行
轉換。vim內部就可以做這件事情。首先打開文本,然后
set?fileformat=unix
再從新保存該文件覆蓋原文件就可以去除:^M了
(14)?如何整體縮進一段代碼(插入tab)?
選中一段代碼,<?或?>?或?2<?或?3>?……
(15)?如何合并兩行?
合并兩行的鍵是?J
另外,如果你設置了
set?backspace=2
你就可以用backspace或者delete很方便的刪到上一行或者下一行。
(16)?如何設置縮進距離(tab寬度)?
set?tabstop=8
set?shiftwidth=8
轉貼如下:
(1)?為什么別人的方法在我這里行不通?
(2)?如何找到上次編輯的文件?
(3)?如何復制粘貼?
(4)?如何在多個文件中進行替換?
(5)?如何把fold一次全部打開?
(6)?如何選擇、復制或者查找光標所在的單詞?
(7)?如何計數搜索的字符串?
(8)?如何去掉高亮搜索?
(9)?如何解決linux下gvim中文菜單亂碼的問題?
(10)?如何對所編輯的文件語法高亮顯示?
(11)?如何快速插入多行數字0-99?
(12)?如何設置中文編碼?
(13)?如何去掉或者插入^M這樣的字符?
(14)?如何整體縮進一段代碼(插入tab)?
(15)?如何合并兩行?
(16)?如何設置縮進距離(tab寬度)?
==============================================================================
(1)?為什么別人的方法在我這里行不通?
估計這是最難回答的一個問題了。:-)
不過首先應該確定你的VIM版本是否足夠新,功能是否完整。使用?:version?命令查看你
的VIM版本以及功能。一個常見的情況,如果你用的是RedHat系統,請確定安裝了
vim-enhance的rpm包,否則將是不完整的VIM。
(2)?如何找到上次編輯的文件?
Ctrl+O?(按兩次)
(3)?如何復制粘貼?
復制
方法一:先ma標記當前位置為a,移動到新的位置,再y`a或者y''a復制從標記位置a到
當前位置的內容。`和''的區別:`以字符為單位,''以行為單位。這個方法應該是所有vi
都適用的。(如果不對請指正。)
方法二:按v或V或Ctrl+V進入visual模式,移動光標選擇一段內容,按y。三者的區別:
v以字符為單位,V以行為單位,Ctrl+V是塊選擇。這個方法只在VIM下適用。
粘貼
p或P。區別:前者粘貼到光標后面,后者粘貼到光標前面。
(4)?如何在多個文件中進行替換?
一般可以用sed或者vim來做。比如要對當前目錄下的*.c文件進行替換:
方法一:
for?i?in?*.c;?do
??sed?-i?-e?''s/oldvalue/newvalue/g''?$i
done
方法二:
vim?*.c
:argdo?%s/oldvalue/newvalue/g
(5)?如何把fold一次全部打開?
zR?或者?:set?foldlevel=999
(6)?如何選擇、復制或者查找光標所在的單詞?
在VIM中用iw或者aw表示一個單詞,兩者稍有區別。
選擇光標所在的單詞:viw?(v進入visual模式,然后iw)
復制光標所在的單詞:yiw
查找的話就是兩個很常用的明令:#?和?*
(7)?如何計數搜索的字符串?
如果需要統計緩沖中一個模式(pattern)出現的頻率,需要把?''report''?置為0,然后
用替換命令把模式替換成它自己。Vim?報告的已替換的數目就是模式出現的次數。例:
????????:set?report=0
????????:%s/./&/g???????????????characters
????????:%s/i+/&/g????????????words
????????:%s/^???????????????????lines
????????:%s/the/&/g?????????????"the"?anywhere
????????:%s/<the>/&/g?????????"the"?as?a?word
你可能希望復位?''hlsearch''?或者使用?":nohlsearch"。
(8)?如何去掉高亮搜索?
方法一::nohlsearch
方法二:/awertgvcxz?(查找一個肯定不存在的字符串)
設置了高亮搜索(:set?hlsearch)以后,可以通過?:set?nohlsearch?永久地關閉高亮
顯示,也可以通過?:nohlsearch?暫時關閉高亮顯示,下次搜索時將自動恢復高亮。
(9)?如何解決linux下gvim中文菜單亂碼問題?
以vim6.3為例
:source?$VIMRUNTIME/delmenu.vim
:source?$VIMRUNTIME/menu.vim
也可以將以上內容加入.vimrc
光source一個menu.vim或者啥也不source都是亂碼
另外,也有網友報告說沒有遇到此類問題
注:這里的source指的是vim自己的source命令,和bash?shell的source無關
(10)?如何對所編輯的文件語法高亮顯示?
需要解釋的是,VI有很多變種,它本身并沒有這種功能,提供這種功能
往往是其各種衍生版本,比如說vim。下面就vim中如何語法高亮簡單解釋一下。
首先,確定一下你所用的操作系統,如果是windows,那么默認的配置文件
就可以工作了。如果還不行,可以用鼠標從syntax菜單下選擇一下適合你的
文件類型(新版本的gvim默認把文件類型選擇關閉了,需要點開,然后按照
開頭字母選擇類型)
如果是linux,那么確認一下是否是redhat。如果是redhat,那么需要安裝
vim-enhanced的rpm包。這些都做了以后,可以用:syntax?on來打開語法高亮。
必要時可以用:set?filetype=...來設定你的文件類型。
如果使用圖形界面,比如gvim,那么syntax?on和set?filetype的操作可以
用鼠標在菜單中選擇,同windows下。
如果是在控制臺中使用vim,還應當確定你的終端設置支持顏色。
(11)?如何快速插入多行數字0-99?
在命令行中輸入以下代碼,或者先把代碼保存到一個外部文件,然后source這個文件:
let?i?=?0
while?i?<?100
??put?=?i
??let?i?=?i?+?1
??endw
如果位數不足需要在前面補零,可以用Ctrl-V塊選擇,然后I插入0。
(12)?如何設置中文編碼?
在.vimrc中作如下設置,可以實現界面以及顯示字體采用gb2312,遇到utf8文件時
自動做轉換:
set?encoding=prc
set?fileencoding=prc
set?fileencodings=utf8,prc
需要注意的是,按照上面的設置,如果你打開一個空的(0字節)或者是純7bits的文件,
這時VIM將認為是utf8編碼的文件,如果你往里面輸入中文,存盤的時候也將是utf8。
因此你可能需要在存盤之前?:set?fileencoding=prc?把編碼改回來。
另外,對于純7bits的文件,由于認成了utf8,每次打開存盤的時候都要做一次轉換,
會比較慢,所以如果你很長一段時間不會接觸utf8的話,可能暫時把?fileencodings
一行注釋掉比較好。
[警告]:轉換可能會造成信息丟失!如果你需要編輯的是重要的系統文件,最好把
fileencodings?一行暫時注釋掉。
(13)?如何去掉或者插入^M這樣的字符?
在VIM的插入模式或者命令行中用<C-V>輸入^M這樣的特殊字符,例如輸入
:s/<C-V><C-M>//g
實際顯示是
:s/^M//g
就可以去掉文件中所有的^M。同理,要在文件中輸入^M只要按<C-V><C-M>即可。
這個問題往往發生在WINDOWS/DOS系統和UNIX系統之間交換文件時,因為這兩類系統
對于文本的“換行”概念解釋不同。所以,還有一個解決方法就是對這類文本進行
轉換。vim內部就可以做這件事情。首先打開文本,然后
set?fileformat=unix
再從新保存該文件覆蓋原文件就可以去除:^M了
(14)?如何整體縮進一段代碼(插入tab)?
選中一段代碼,<?或?>?或?2<?或?3>?……
(15)?如何合并兩行?
合并兩行的鍵是?J
另外,如果你設置了
set?backspace=2
你就可以用backspace或者delete很方便的刪到上一行或者下一行。
(16)?如何設置縮進距離(tab寬度)?
set?tabstop=8
set?shiftwidth=8