VIM高手進階操作

100i word [ESC] 插入100個word
. 重複上一個命令
3. 重複3次插入word




=======光標移動========
NG 到第N行
gg 第一行
G 最後一行
0 → 到行頭
^ → 到本行的第一個非blank字符
$ → 到行尾
g_ → 到本行最後一個不是blank字符的位置。
fa → 到下一個爲a的字符處,你也可以fs到下一個爲s的字符。
t, → 到逗號前的第一個字符。逗號可以變成其它字符。
3fa → 在當前行查找第三個出現的a。
F 和 T → 和 f 和 t 一樣,只不過是相反方向。


% 匹配括號移動,包括 (, {, [.
*和# 匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)
H 移動到視野內的首行
M 移動到視野內的中間行
L 移動到視野內的末行




========選擇========


0y$ 拷貝從行頭到行尾的字符
y2/foo 拷貝2個 "foo" 之間的字符串
dt" → 刪除所有的內容,直到遇到雙引號


區域選擇 <action>a<object> 或 <action>i<object>
action可以是任何的命令,如 d (刪除), y (拷貝), v (可以視模式選擇)。
object 可能是: w 一個單詞, W 一個以空格爲分隔的單詞, s 一個句字, p 一個段落。也可以是一個特別的字符:"、 '、 )、 }、 ]。
假設有一個字符串 (map (+) ("foo")).而光標鍵在第一個 o 的位置。
vi" → 會選擇 foo.
va" → 會選擇 "foo".
vi) → 會選擇 "foo".
va) → 會選擇("foo").
v2i) → 會選擇 map (+) ("foo")
v2a) → 會選擇 (map (+) ("foo"))


按【v】 鍵進入選擇模式,然後按h,j,k,l移動光標,選擇文本,然後按 【y】 進行復制,按 【p】 進行粘貼。


塊操作(<C-v>進入)
^ → 到行頭
<C-v> → 開始塊操作
<C-d> → 向下移動 (你也可以使用hjkl來移動光標,或是使用%,或是別的)
I-- [ESC] → I是插入,插入“--”,按ESC鍵來爲每一行生效。
在Windows下的vim,你需要使用 <C-q> 而不是 <C-v> ,<C-v> 是拷貝剪貼板。
J → 把所有的行連接起來(變成一行)
< 或 > → 左右縮進
= → 自動給縮進 




宏錄製
qa 把你的操作記錄在寄存器 a。
於是 @a 會replay被錄製的宏。
@@ 是一個快捷鍵用來replay最新錄製的宏。
在一個只有一行且這一行只有“1”的文本中,鍵入如下命令:


qaYp<C-a>q→
qa 開始錄製
Yp 複製行.
<C-a> 增加1.
q 停止錄製.
@a → 在1下面寫下 2
@@ → 在2 正面寫下3
現在做 100@@ 會創建新的100行,並把數據增加到 103.




=========字符相關==========
【guu 】 – 把一行的文字變成全小寫。或是【Vu】


【gUU】 – 把一行的文件變成全大寫。或是【VU】


按【v】鍵進入選擇模式,然後移動光標選擇你要的文本,按【u】轉小寫,按【U】轉大寫


【ga】 –  查看光標處字符的ascii碼


【g8】 – 查看光標處字符的utf-8編碼


【gf】  - 打開光標處所指的文件 (這個命令在打到#include頭文件時挺好用的,當然,僅限於有路徑的)


【*】或【#】在當前文件中搜索當前光標的單詞


===========縮進================
【>>】向右給它進當前行 【<<】向左縮進當前行


【=】  - 縮進當前行 (和上面不一樣的是,它會對齊縮進)


【=%】 – 把光標位置移到語句塊的括號上,然後按=%,縮進整個語句塊(%是括號匹配)


【G=gg】 或是 【gg=G】  - 縮進整個文件(G是到文件結尾,gg是到文件開頭)


daw 當在光標在一個單詞中間時,刪除此單詞

"*yy 複製到剪貼板
"*p 從剪貼板粘貼




Tab頁瀏覽目錄
:Te  全稱是 :Texplorer
gt   – 到下一個頁


gT  - 到前一個頁


{i} gt   – i是數字,到指定頁,比如:5 gt 就是到第5頁


你可以以使用 【:tabm {n}】來切換Tab頁。


gvim應該是:Ctrl+PgDn 和 Ctrl+PgUp 來在各個頁中切換。


如果你想看看你現在打開的窗口和Tab的情況,你可以使用下面的命令:


:tabs
:tabclose [i] – 如果後面指定了數字,那就關閉指定頁,如果沒有就關閉當前頁


最後提一下,如果你在Shell命令行下,你可以使用 vim 的 -p 參數來用Tab頁的方式打開多個文件,比如:


vim -p cool.cpp shell.cpp haoel.cpp
vim -p *.cpp


注:如果你想把buffer中的文件全轉成tab的話,你可以使用下面的命令


:bufdo tab split




緩衝區
用:E 瀏覽打開的文件都沒有被關閉,這些文件都在緩衝區中。你可以用下面的命令來查看緩衝區:


:ls
:buffer 4
:buffer src/http/ngx_http.c


:bnext      縮寫 :bn
:bprevious   縮寫 :bp
:blast  縮寫 :bl
:bfirst 縮寫 :bf


上圖中,我們還可以看到5有一個%a,這表示當前文件,相關的標記如下:


- (非活動的緩衝區)
a (當前被激活緩衝區)
h (隱藏的緩衝區)
% (當前的緩衝區)
# (交換緩衝區)
= (只讀緩衝區)
+ (已經更改的緩衝區)


窗口
<C+W>+hjkl或<C+hjkl> 窗口間移動
<C+W>= 均分窗口
<C+W>+ 高度加1
<C+W>- 高度減1
<C+W>< 寬度減1
<C+W>> 寬度加1
<C+W>_ 最大高度
<C+W>| 最大寬度
qall 同時退出所有窗口


session
mksession filename.vim 創建session文件
wviminfo filename.viminfo 創建一個viminfo文件
source 載入會話文件
rviminfo 讀入viminfo文件


雜亂命令
:helptags $HOME/.vim/doc 添加新的幫助文件到vim


vim中的^M
在linux系統裏設置set fileformats=unix可以看到從windows遷移過來的文件中的換行符亂碼,爲^M,輸入命令%s/^M/\r/g,命令中的^M通過Ctrl+v+M輸入


================搜索=====================
:vimgrep /{pattern}/[g][j]{file}...
with 'g' every match is added;
with 'j' only the quickfix list is updated;


:vimgrep /keyword/gj D:/dir/*/*.txt 不包含子文件夾搜索目錄中的關鍵字
:vimgrep /keyword/gj D:/dir/**/*.txt 包含子文件夾搜索目錄中的關鍵字
使用j關鍵字進行搜索後需要打開quikfix窗口查看匹配結果 :cw
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章