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
. 重複上一個命令
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.