Linux vim快捷鍵操作命令整理

前言

Vim是一個超牛的編輯器,命令功能十分強大 。而且這些命令大都可以進行組合 ,比如,9yy命令表示複製9行內容,9表示要複製的行數,同樣100dd表示刪除100行,當數字和命令合作的時候,就比單純的命令更強大,同樣,c命令表示擦除,w表示word即單詞,那麼cw就表示擦除一個單詞,c5w就表示刪除5個單詞等等。將這些簡單命令合成在一起,就可以發揮出難以想象的強大功能。


宏命令(Macros)

高級一些的編輯器,都會包含宏功能,vim當然不能缺少了,在vim中使用宏是非常方便的:


:qx

開始記錄宏,並將結果存入寄存器x

q

退出記錄模式

@x

播放記錄在x寄存器中的宏命令

稍微解釋一下,當在normal模式下輸入:qx後,你對文本的所有編輯動作將會被記錄下來,再次輸入q即退出了記錄模式,然後輸入@x對剛纔記錄下來的命令進行重複,此命令後可跟數字,表示要重複多少次,比如@x20,可以重複20次。這個在文本的批處理中是非常有用的。

同時編輯多個文件

在vim衆多的插件中,有一個叫minibuffer的插件,就是下面所說的標籤頁功能了,可以支持同時編輯多個文件。


標籤命令

 

:tabe fn

在一個新的標籤頁中編輯文件fn

gt

切換到下一個標籤頁

gT

切換到上一個標籤頁

:tabr

切換到第一個標籤頁

:tabl

切換到最後一個標籤頁

:tabm [N]

把當前tab移動到第N個tab之後

對,正如你所想象的那樣,跟eclipse, ue等的標籤頁是一個意思!

窗口命令

 

ctrl+w s

水平分割窗口

ctrl+w w

切換窗口

ctrl+w q

退出當前窗口(由於同時有多個文件,此命令不會影響其他窗口)

ctrl+w v

垂直分割窗口

其他

vim在保存之前不會對文件做實際的修改,只是加載到緩衝區中,對文件的編輯其實是對緩衝區的編輯,直到:w時纔會存入物理文件。

 

:e file

把file加載到新的緩衝區中

:bn

跳轉到下一個緩衝區

:bd

刪除緩衝區(關閉文件)

:sp fn

分割窗口,並將fn加載到新的窗口中

退出編輯器

 

:w

將緩衝區寫入文件,即保存修改

:wq

保存修改並退出

:x

保存修改並退出

:q

退出,如果對緩衝區進行過修改,則會提示

:q!

強制退出,放棄修改

查找替換

 

/pattern

向後搜索字符串pattern

?pattern

向前搜索字符串pattern

n

下一個匹配(如果是/搜索,則是向下的下一個,?搜索則是向上的下一個)

N

上一個匹配(同上)

:%s/old/new/g

搜索整個文件,將所有的old替換爲new

:%s/old/new/gc

搜索整個文件,將所有的old替換爲new,每次都要你確認是否替換


複製粘貼

dd

刪除光標所在行

dw

刪除一個字(word)

x

刪除當前字符

X

刪除前一個字符

D

刪除到行末

yy

複製一行,此命令前可跟數字,標識複製多行,如6yy,表示從當前行開始複製6行

yw

複製一個字

y$

複製到行末

p

粘貼粘貼板的內容到當前行的下面

P

粘貼粘貼板的內容到當前行的上面

]p

有縮進的粘貼,vim會自動調節代碼的縮進

"a

將內容放入/存入a寄存器,可以支持多粘貼板

附:比如常用的一個寄存器就是系統寄存器,名稱爲+,所以從系統粘貼板粘貼到vim中的命令爲"+p,注意此處的+不表示操作符,二十一個寄存器。


移動光標

在vim中移動光標跟其他的編輯器中有很大的區別,不過一旦學會了,就會飛速 的在文本中移動了。

 

h,j,k,l

上,下,左,右

ctrl-f

上翻一頁

ctrl-b

下翻一頁

%

跳到與當前括號匹配的括號處,如當前在{,則跳轉到與之匹配的}處

w

跳到下一個字首,按標點或單詞分割

W

跳到下一個字首,長跳,如end-of-line被認爲是一個字

e

跳到下一個字尾

E

跳到下一個字尾,長跳

b

跳到上一個字

B

跳到上一個字,長跳

0

跳至行首,不管有無縮進,就是跳到第0個字符

^

跳至行首的第一個字符

$

跳至行尾

gg

跳至文件的第一行

gd

跳至當前光標所在的變量的聲明處

[N]G

跳到第N行,如0G,就等價於gg,100G就是第100行

fx

在當前行中找x字符,找到了就跳轉至

;

重複上一個f命令,而不用重複的輸入fx

tx

與fx類似,但是隻是跳轉到x的前一個字符處

Fx

跟fx的方向相反

),(

跳轉到上/下一個語句

*

查找光標所在處的單詞,向下查找 在此組合n鍵,可以在各個找找內容之間切換

#

查找光標所在處的單詞,向上查找

`.

跳轉至上次編輯位置

”Ctrl + }“ 可以跳轉到函數或變量的定義處,“Ctrl + o”可以返回上一個跳轉頁面。



在屏幕上移動

 

H

移動光標到當前屏幕上最上邊的一行

M

移動光標到當前屏幕上中間的一行

L

移動光標到當前屏幕上最下邊的一行

書籤

 

ma

把當前位置存成標籤a

`a

跳轉到標籤a

 

編輯

 

r

替換一個字符

J

將下一行和當前行連接爲一行

cc

刪除當前行並進入編輯模式

cw

刪除當前字,並進入編輯模式

c$

擦除從當前位置至行末的內容,並進入編輯模式

s

刪除當前字符並進入編輯模式

S

刪除光標所在行並進入編輯模式

xp

交換當前字符和下一個字符

u

撤銷

ctrl+r

重做

.

重複上一個編輯命令

~

切換大小寫,當前字符

g~iw

切換當前字的大小寫

gUiw

將當前字變成大寫

guiw

將當前字變成小寫

>>

將當前行右移一個單位

<<

將當前行左移一個單位(一個tab符)

==

自動縮進當前行

 

插入模式

 

i

從當前光標處進入插入模式

I

進入插入模式,並置光標於行首

a

追加模式,置光標於當前光標之後

A

追加模式,置光標於行末

o

在當前行之下新加一行,並進入插入模式

O

在當前行之上新加一行,並進入插入模式

Esc

退出插入模式


可視模式

標記文本

v

進入可視模式,單字符模式

V

進入可視模式,行模式

ctrl+v

進入可視模式,列模式 ,類似於UE的列模式

o

跳轉光標到選中塊的另一個端點

U

將選中塊中的內容轉成大寫

O

跳轉光標到塊的另一個端點

aw

選中一個字

ab

選中括號中的所有內容,包括括號本身

aB

選中{}括號中的所有內容

ib

選中括號中的內容,不含括號

iB

選中{}中的內容,不含{}


對標記進行動作

 

>

塊右移

<

塊左移

y

複製塊

d

刪除塊

~

切換塊中內容的大小寫

 

鍵盤圖:


VIM中常用的替換模式總結


1,簡單替換表達式

替換命令可以在全文中用一個單詞替換另一個單詞:

:%s/four/4/g


“%” 範圍前綴表示在所有行中執行替換。最後的 “g” 標記表示替換行中的所有匹配點。如果僅僅對當前行進行操作,那麼只要去掉%即可

如果你有一個象“thirtyfour” 這樣的單詞,上面的命令會出錯。這種情況下,這個單詞會被替換成”thirty4″。要解決這個問題,用 “\<” 來指定匹配單詞開頭:

:%s/\<four/4/g

顯然,這樣在處理“fourty” 的時候還是會出錯。用“\>” 來解決這個問題:

:%s/\<four\>/4/g

如果你在編碼,你可能只想替換註釋中的 “four”,而保留代碼中的。由於這很難指定,可以在替換命令中加一個 “c” 標記,這樣,Vim 會在每次替換前提示你:

:%s/\<four\>/4/gc

2,刪除多餘的空格

要刪除這些每行後面多餘的空格,可以執行如下命令:

:%s/\s\+$//

命令前面指明範圍是 “%”,所以這會作用於整個文件。”substitute” 命令的匹配模式是

“\s\+$”。這表示行末($)前的一個或者多個(\+)空格(\s)。替換命令的 “to” 部分是空的:”//”。這樣就會刪除那些匹配的空白字符。

3,匹配重複性模式

星號項 “*” 規定在它前面的項可以重複任意次。因此:

/a*

匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因爲零次也包含在內。星號 “*” 僅僅應用於那個緊鄰在它前面的項。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重複整個字符串,那麼該字符串必須被組成一個項。組成一項的方法就是在它前面加 “\(”,後面加 “\)”。因此這個命令:

/\(ab\)*

匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。

要避免匹配空字串,使用“\+”。這表示前面一項可以被匹配一次或多次。

/ab\+

匹配 “ab”,”abb”,”abbb”,等等。它不匹配 後面沒有跟隨 “b” 的 “a”。

要匹配一個可選項,用“\=”。 例如:

/folders\=

匹配 “folder” 和 “folders”。

4,指定重複次數

要匹配某一項的特定次數重複,使用 “\{n,m}” 這樣的形式。其中 “n” 和 “m” 都是數字。在它前面的那個項將被重複 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:

/ab\{3,5}

匹配 “abbb”,”abbbb” 以及 “abbbbb”。

當 “n” 省略時,被默認爲零。當 “m” 省略時,被默認爲無限大。當 “,m” 省略時,就表示重複正好 “n” 次。例如:

模式 匹配次數

\{,4} 0,1,2,3 或 4

\{3,} 3,4,5,等等

\{0,1} 0 或 1,同 \=

\{0,} 0 或 更多,同 *

\{1,} 1 或 更多,同 \+

\{3} 3

5,多選一匹配

在一個查找模式中,”或” 運算符是 “\|”。例如:

/foo\|bar

這個命令匹配了 “foo” 或 “bar”。更多的抉擇可以連在後面:

/one\|two\|three

匹配 “one”,”two” 或 “three”。

如要匹配其多次重複,那麼整個抉擇結構須置於 “\(” 和 “\)” 之間:

/\(foo\|bar\)\+

這個命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。

再舉個例子:

/end\(if\|while\|for\)

這個命令匹配 “endif”,”endwhile” 和 “endfor”。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章