1) 為什麼別人的方法在我這裡行不通?
(2) 如何找到上次編輯的檔案?
(3) 如何複製粘貼?
(4) 如何在多個檔案中進行替換?
(5) 如何把fold一次全部開啟?
(6) 如何選擇或者複製游標所在的單詞?
(7) 如何計數搜尋的字串?
(8) 如何去掉高亮搜尋?
(9) 如何解決linux下gvim中文菜單亂碼的問題?
(10) 如何對所編輯的檔案文法高亮顯示?
(11) 如何快速插入多行數字0-99?
==============================================================================
(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下適用。
(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 /usr/local/vim/share/vim/vim63/delmenu.vim
source /usr/local/vim/share/vim/vim63/menu.vim
光source一個menu.vim或者啥也不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。
※ 修改:·thinelephant 於 Jun 30 11:03:43 修改本文·[FROM: 211.100.11.*]
※ 來源:·BBS 水木清華站 smth.org·[FROM: 211.100.11.*]
發信人: vale (淺穀·等待溪流), 信區: VIM
標 題: VIM中不易發現的強勁功能
發信站: BBS 水木清華站 (Mon May 31 10:54:41 2004), 站內
在我最初使用Vim時,有些功能並不知道,等發現後真後悔自己幹了那麼久的體力活。
1. * (super star)
向下尋找游標下(或附近)的<word>。向上找用#。g*尋找則不限制whole word。
2. C-R (magic insert)
在insert模式下,C-R (register) 插入register裡的內容,一個有趣的reg是"=".
假設你想輸入123K的具體位元組數,不用開啟計算機,試試這個“<C-R>=1024*123<CR>”,
“125952”就出來了!
另外在命令列裡C-R C-W和C-R C-A是必用的技巧,它們將游標下的<word>和<WORD>
考到命令列裡,省了你無數的typing。
3. C-X (auto complete)
在insert模式下,C-X C-P/N/L/F等自動完成前面的詞、行、檔案名稱等,是編程時必用的
命令。其中C-P和C-N可以不用C-X。
4. [p & ]p (smart paste)
paste同時自動根據目標行的縮排調整來源行的縮排。在copy程式碼片段的時候非常有用。
5. C-O (fast out, fast in)
在insert模式下,用C-O後可以執行一個normal命令,然後立即返回insert模式,省去了
用ESC的麻煩。
6. [I (fast grep )
[I顯示檔案中包含游標下<word>的所有行。我常用來瀏覽某個id在程式中的引用情況。
還有很多相關的命令::h include-search
7. object-select
iw, aw, ib, i], i} ... 都非常有用!看help吧
:h object-select
先寫這麼多,以後再補充吧。
--
The world puts off its mask of vastness to its lover.
It becomes small as one song, as one kiss of the eternal.
※ 來源:·BBS 水木清華站 http://smth.org·[FROM: 210.82.111.*]
發信人: ann77 (ann), 信區: VIM
標 題: 我常用的 vim 的功能
發信站: BBS 水木清華站 (Fri May 28 13:39:08 2004), 站內
光說我馬上能夠想起來的。
1.
fx
x 表示任何一個字元。
這是最快的在一行種移動的方法了。然後用
; (分號)
繼續移動。
反向移動好像是 t ,但是我記性不好,
總是記不住,於是
0fx
用 0 先回到行首,在 f
2.
任何一個操作命令在加一個移動命令。實現對某個範圍的操作。
例如
dfx
表示刪除到下一個出現 x 的地方, x 可以使任一字元。
操作命令有 d (cut), y(copy) , p(paste), v (select)
移動命令有 hjkl, f, /, gg, G
3.
任何命令組合都可以先按一些 數字健 表示重複操作。
如:
d123j
刪除下面123行。
4. 宏紀錄的功能
例如,把檔案中所有奇數行和偶數行合并。按如下序列
gg
qq
J
q
100000000@q
5. C-p
在 insert mode 下
寫程式的時候,任何超長的變數名字都不成問題。
如果有一個this_is_very_long_variable_name
可以
this<C-P>
90%的可能性自動就把名字補全了。
於是,我寫程式的時候,變數的名字其的越來越長,輸入越來越快。:)
6. C-x C-p
在寫程式 abc.h 的時候
寫道 #include "abc.h" 的時候
其實可以
#include "a<C-x><C-p>"
90% 的情況,可以自動補全檔案名稱。
6.從外部命令輸入
:r !ls
可以讀取目前的目錄的檔案清單。
如果你對 bash 很熟悉的話,這個功能非常好用
例如
輸入
case 1
case 2
....
case 1000:
的方法是
:r !for ((i=0;i<100;i++));do echo "case $i" ; done
7. 利用外部命令處理文字。
我在 ~/.vimrc 中寫了一行。
map = ggVG:!indent -nut -st -kr 2>/dev/null<CR>G
我按一個 = ,就可以利用外部命令 indent 美化 我的 c 程式。
我認為,
還可以用外部命令排序
例如
用 v 選定要排序的地區
然後按一個歎號。
:'<,'>!sort
8
我在 ~/.vimrc 中寫了
map <Left> :bp<CR>
map <Right> :bn<CR>
map <F4> :bd<CR>
就可以用 左右方向健來切換 buffer
F4 關閉 buffer 了。
9
我在 ~/.vimrc 中寫了
runtime ftplugin/man.vim
就可以在把游標停在一個函數上,然後用
/k
查看線上協助了。
用
:Man getuid
查看 getuid 函數的手冊了。
10.
:make
可以用外部命令 make 編譯工程。
:cw
查看出錯資訊,
:cn
:cp
在出錯資訊之間跳轉。
11.
]] , [[ , [] , ][ 命令可以在函數之間移動。