——-史上最全的Vim命令 ——-vim命令 /正則表達式 /搜索 /定位 /分屏

一,vim vim編輯器是vi的進階版,是一個靜態文本編輯器。它的強大不遜色于任何最新的文本編輯器,
對Unix及Linux系統的任何版本,vi編輯器是完全相同的。Vi也是Linux中最基本的文本…

史上最全的Vim命令
vim命令 /正則表達式 /搜索 /定位 /分屏

一,vim vim編輯器是vi的進階版,是一個靜態文本編輯器。它的強大不遜色于任何最新的文本編輯器,
對Unix及Linux系統的任何版本,vi編輯器是完全相同的。Vi也是Linux中最基本的文本…

【1. Vim的幾種模式】
正常模式:可以使用快捷鍵命令,或按:輸入命令行。
插入模式:可以輸入文本,在正常模式下,按i、a、o等都可以進入插入模式。
可視模式:正常模式下按v可以進入可視模式, 在可視模式下,移動光標可以選擇文本。
按V進入可視行模式, 總是整行整行的選中。ctrl+v進入可視塊模式。
替換模式:正常模式下,按R進入。

【2. 啟動Vim】
vim -c cmd file: 在打開文件前,先執行指定的命令;
vim -r file: 恢復上次異常退出的文件;
vim -R file: 以只讀的方式打開文件,但可以強制保存;
vim -M file: 以只讀的方式打開文件,不可以強制保存;
vim -y num file: 將編輯窗口的大小設為num行;
vim + file: 從文件的末尾開始;
vim +num file: 從第num行開始;
vim +/string file: 打開file,并將光標停留在第一個找到的string上。
vim –remote file: 用已有的vim進程打開指定的文件。 如果你不想啟用多個vim會話,這個很有用。
但要注意, 如果你用vim,會尋找名叫VIM的服務器;如果你已經有一個gvim在運行了,
你可以用gvim –remote file在已有的gvim中打開文件。

【3. 文檔操作】
:e file –關閉當前編輯的文件,并開啟新的文件。 如果對當前文件的修改未保存,vi會警告。
:e! file –放棄對當前文件的修改,編輯新的文件。
:e! — 重新加載當前文檔,并丟棄已做的改動。
:e#或ctrl+^ — 回到剛才編輯的文件,很實用。
:f或ctrl+g — 顯示文檔名,是否修改,和光標位置。
:f filename — 改變編輯的文件名,這時再保存相當于另存為。
:w — 保存修改。
:n1,n2w filename — 選擇性保存從某n1行到另n2行的內容。
:wq — 保存并退出。
ZZ — 保存并退出。
:x — 保存并退出。
:q[uit] ——退出當前窗口。(CTRL-W q或CTRL-W CTRL-Q)
:saveas newfilename — 另存為

【4. 基本移動】

以下移動都是在normal模式下。
h或退格: 左移一個字符;
l或空格: 右移一個字符;
j: 下移一行;
k: 上移一行;
gj: 移動到一段內的下一行;
gk: 移動到一段內的上一行;
+或Enter: 把光標移至下一行第一個非空白字符。
-: 把光標移至上一行第一個非空白字符。
w: 前移一個單詞,光標停在下一個單詞開頭;
W: 移動下一個單詞開頭,但忽略一些標點;
e: 前移一個單詞,光標停在下一個單詞末尾;
E: 移動到下一個單詞末尾,如果詞尾有標點,則移動到標點;
b: 后移一個單詞,光標停在上一個單詞開頭;
B: 移動到上一個單詞開頭,忽略一些標點;
ge: 后移一個單詞,光標停在上一個單詞末尾;
gE: 同 ge ,不過‘單詞’包含單詞相鄰的標點。
(: 前移1句。
): 后移1句。
{: 前移1段。
}: 后移1段。
fc: 把光標移到同一行的下一個c字符處
Fc: 把光標移到同一行的上一個c字符處
tc: 把光標移到同一行的下一個c字符前
Tc: 把光標移到同一行的上一個c字符后
;: 配合f & t使用,重復一次
,: 配合f & t使用,反向重復一次
上面的操作都可以配合n使用,比如在正常模式(下面會講到)下輸入3h, 則光標向左移動3個字符。

0: 移動到行首。
g0: 移到光標所在屏幕行行首。
^: 移動到本行第一個非空白字符。
g^: 同 ^ ,但是移動到當前屏幕行第一個非空字符處。
$: 移動到行尾。
g$: 移動光標所在屏幕行行尾。
n|: 把光標移到遞n列上。
nG: 到文件第n行。
:n<cr> 移動到第n行。
:$<cr> 移動到最后一行。
H: 把光標移到屏幕最頂端一行。
M: 把光標移到屏幕中間一行。
L: 把光標移到屏幕最底端一行。
gg: 到文件頭部。
G: 到文件尾部。

【5. 翻屏】

ctrl+f: 下翻一屏。
ctrl+b: 上翻一屏。
ctrl+d: 下翻半屏。
ctrl+u: 上翻半屏。
ctrl+e: 向下滾動一行。
ctrl+y: 向上滾動一行。
n%: 到文件n%的位置。
zz: 將當前行移動到屏幕中央。
zt: 將當前行移動到屏幕頂端。
zb: 將當前行移動到屏幕底端。

標記
使用標記可以快速移動。到達標記后,可以用Ctrl+o返回原來的位置。
Ctrl+o和Ctrl+i 很像瀏覽器上的 后退 和 前進 。

m{a-z}: 標記光標所在位置,局部標記,只用于當前文件。
m{A-Z}: 標記光標所在位置,全局標記。標記之后,退出Vim, 重新啟動,標記仍然有效。
`{a-z}: 移動到標記位置。
‘{a-z}: 移動到標記行的行首。
`{0-9}:回到上[2-10]次關閉vim時最后離開的位置。
“: 移動到上次編輯的位置。”也可以,不過“精確到列,而”精確到行 。
如果想跳轉到更老的位置,可以按C-o,跳轉到更新的位置用C-i。
`”: 移動到上次離開的地方。
`.: 移動到最后改動的地方。
:marks 顯示所有標記。
:delmarks a b — 刪除標記a和b。
:delmarks a-c — 刪除標記a、b和c。
:delmarks a c-f — 刪除標記a、c、d、e、f。
:delmarks! — 刪除當前緩沖區的所有標記。
:help mark-motions 查看更多關于mark的知識。

【6. 插入文本】

基本插入
i: 在光標前插入;一個小技巧:按8,再按i,進入插入模式,輸入=, 按esc進入命令模式,就會出現8個=。
這在插入分割線時非常有用,如30i+<esc>就插入了36個+組成的分割線。
I: 在當前行第一個非空字符前插入;
gI: 在當前行第一列插入;
a: 在光標后插入;
A: 在當前行最后插入;
o: 在下面新建一行插入;
O: 在上面新建一行插入;
:r filename在當前位置插入另一個文件的內容。
:[n]r filename在第n行插入另一個文件的內容。
:r !date 在光標處插入當前日期與時間。同理,:r !command可以將其它shell命令的輸出插入當前文檔。

改寫插入
c[n]w: 改寫光標后1(n)個詞。
c[n]l: 改寫光標后n個字母。
c[n]h: 改寫光標前n個字母。
[n]cc: 修改當前[n]行。
[n]s: 以輸入的文本替代光標之后1(n)個字符,相當于c[n]l。
[n]S: 刪除指定數目的行,并以所輸入文本代替之。

【7. 剪切復制和寄存器】

剪切和復制、粘貼
[n]x: 剪切光標右邊n個字符,相當于d[n]l。
[n]X: 剪切光標左邊n個字符,相當于d[n]h。
y: 復制在可視模式下選中的文本。
yy or Y: 復制整行文本。
y[n]w: 復制一(n)個詞。
y[n]l: 復制光標右邊1(n)個字符。
y[n]h: 復制光標左邊1(n)個字符。
y$: 從光標當前位置復制到行尾。
y0: 從光標當前位置復制到行首。
:m,ny<cr> 復制m行到n行的內容。
y1G或ygg: 復制光標以上的所有行。
yG: 復制光標以下的所有行。
yaw和yas:復制一個詞和復制一個句子,即使光標不在詞首和句首也沒關系。
d: 刪除(剪切)在可視模式下選中的文本。
d$ or D: 刪除(剪切)當前位置到行尾的內容。
d[n]w: 刪除(剪切)1(n)個單詞
d[n]l: 刪除(剪切)光標右邊1(n)個字符。
d[n]h: 刪除(剪切)光標左邊1(n)個字符。
d0: 刪除(剪切)當前位置到行首的內容
[n] dd: 刪除(剪切)1(n)行。
:m,nd<cr> 剪切m行到n行的內容。
d1G或dgg: 剪切光標以上的所有行。
dG: 剪切光標以下的所有行。
daw和das:剪切一個詞和剪切一個句子,即使光標不在詞首和句首也沒關系。
d/f<cr>:這是一個比較高級的組合命令,它將刪除當前位置 到下一個f之間的內容。
p: 在光標之后粘貼。
P: 在光標之前粘貼。

文本對象
aw:一個詞
as:一句。
ap:一段。
ab:一塊(包含在圓括號中的)。
y, d, c, v都可以跟文本對象。

寄存器
a-z:都可以用作寄存器名。”ayy把當前行的內容放入a寄存器。
A-Z:用大寫字母索引寄存器,可以在寄存器中追加內容。 如”Ayy把當前行的內容追加到a寄存器中。
:reg 顯示所有寄存器的內容。
“”:不加寄存器索引時,默認使用的寄存器。
“*:當前選擇緩沖區,”*yy把當前行的內容放入當前選擇緩沖區。
“+:系統剪貼板。”+yy把當前行的內容放入系統剪貼板。

【8. 查找與替換】

查找
/something: 在后面的文本中查找something。
?something: 在前面的文本中查找something。
/pattern/+number: 將光標停在包含pattern的行后面第number行上。
/pattern/-number: 將光標停在包含pattern的行前面第number行上。
n: 向后查找下一個。
N: 向前查找下一個。

替換
:s/old/new – 用new替換當前行第一個old。
:s/old/new/g – 用new替換當前行所有的old。
:n1,n2s/old/new/g – 用new替換文件n1行到n2行所有的old。
:%s/old/new/g – 用new替換文件中所有的old。
:%s/^/xxx/g – 在每一行的行首插入xxx,^表示行首。
:%s/$/xxx/g – 在每一行的行尾插入xxx,$表示行尾。
所有替換命令末尾加上c,每個替換都將需要用戶確認。 如:%s/old/new/gc,加上i則忽略大小寫(ignore)。
還有一種比替換更靈活的方式,它是匹配到某個模式后執行某種命令,
語法為 :[range]g/pattern/command
例如 :%g/^ xyz/normal dd。
表示對于以一個空格和xyz開頭的行執行normal模式下的dd命令。

關于range的規定為:
如果不指定range,則表示當前行。
m,n: 從m行到n行。
0: 最開始一行(可能是這樣)。
$: 最后一行
.: 當前行
%: 所有行

正則表達式
高級的查找替換就要用到正則表達式。

\d: 表示十進制數(我猜的)
\s: 表示空格
\S: 非空字符
\a: 英文字母
\|: 表示 或
\.: 表示.
{m,n}: 表示m到n個字符。這要和 \s與\a等連用,如 \a\{m,n} 表示m 到n個英文字母。
{m,}: 表示m到無限多個字符。
**: 當前目錄下的所有子目錄。
:help pattern得到更多幫助。

【9. 分屏編輯】
vim -o file1 file2:水平分割窗口,同時打開file1和file2
vim -O file1 file2:垂直分割窗口,同時打開file1和file2

水平分割
:split(:sp) — 把當前窗水平分割成兩個窗口。(CTRL-W s 或 CTRL-W CTRL-S) 注意如果在終端下,CTRL-S可能會凍結終端,請按CTRL-Q繼續。
:split filename — 水平分割窗口,并在新窗口中顯示另一個文件。
:nsplit(:nsp) — 水平分割出一個n行高的窗口。
:[N]new — 水平分割出一個N行高的窗口,并編輯一個新文件。 (CTRL-W n或 CTRL-W CTRL-N)
ctrl+w f –水平分割出一個窗口,并在新窗口打開名稱為光標所在詞的文件 。
C-w C-^ — 水平分割一個窗口,打開剛才編輯的文件。

垂直分割
:vsplit(:vsp) — 把當前窗口分割成水平分布的兩個窗口。 (CTRL-W v或CTRL CTRL-V)
:[N]vne[w] — 垂直分割出一個新窗口。
:vertical 水平分割的命令: 相應的垂直分割。

【10. 關于多窗口】
:qall — 關閉所有窗口,退出vim。
:wall — 保存所有修改過的窗口。
:only — 只保留當前窗口,關閉其它窗口。(CTRL-W o)
:close — 關閉當前窗口,CTRL-W c能實現同樣的功能。 (象 :q :x同樣工作 )

調整窗口大小
ctrl+w + –當前窗口增高一行。也可以用n增高n行。
ctrl+w – –當前窗口減小一行。也可以用n減小n行。
ctrl+w _ –當前窗口擴展到盡可能的大。也可以用n設定行數。
:resize n — 當前窗口n行高。
ctrl+w = — 所有窗口同樣高度。
n ctrl+w _ — 當前窗口的高度設定為n行。
ctrl+w < –當前窗口減少一列。也可以用n減少n列。
ctrl+w > –當前窗口增寬一列。也可以用n增寬n列。
ctrl+w | –當前窗口盡可能的寬。也可以用n設定列數。

切換和移動窗口
如果支持鼠標,切換和調整子窗口的大小就簡單了。
ctrl+w ctrl+w: 切換到下一個窗口?;蛘呤莄trl+w w。
ctrl+w p: 切換到前一個窗口。
ctrl+w h(l,j,k):切換到左(右,下,上)的窗口。
ctrl+w t(b):切換到最上(下)面的窗口。<BR>
ctrl+w H(L,K,J): 將當前窗口移動到最左(右、上、下)面。
ctrl+w r:旋轉窗口的位置。
ctrl+w T: 將當前的窗口移動到新的標簽頁上。

【11. 快速編輯】

改變大小寫
~: 反轉光標所在字符的大小寫。
可視模式下的U或u:把選中的文本變為大寫或小寫。
gu(U)接范圍(如$,或G),可以把從光標當前位置到指定位置之間字母全部 轉換成小寫或大寫。
如ggguG,就是把開頭到最后一行之間的字母全部變為小 寫。再如gu5j,把當前行和下面四行全部變成小寫。

替換(normal模式)
r: 替換光標處的字符,同樣支持漢字。
R: 進入替換模式,按esc回到正常模式。

撤消與重做(normal模式)
[n] u: 取消一(n)個改動。
:undo 5 — 撤銷5個改變。
:undolist — 你的撤銷歷史。
ctrl + r: 重做最后的改動。
U: 取消當前行中所有的改動。
:earlier 4m — 回到4分鐘前
:later 55s — 前進55秒

QQ圖片20171121204505

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88969

(3)
lvshijunlvshijun
上一篇 2017-11-26
下一篇 2017-11-26

相關推薦

  • LVM

    LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現,目前最新版本為:穩定版1.0.5,開發版 1.1.0-rc2,以及LVM2開發版。Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地…

    Linux干貨 2016-12-17
  • 命令行歷史和調用命令參數

    history顯示當前終端的歷史記錄 !! 重復執行上一條命令 !-n 重復執行倒數第n條命令 !n 重復執行第n條命令 ctrl+p 等于向上方向鍵,翻出上一條命令。 ctrl+n 等于向下方向鍵,翻出下一條命令。 ctrl+j 等于enter 執行當前命令 !:0 執行前一條命令(去除參數) !string 重復前一個以“string”開頭的命令(只限于…

    2017-07-14
  • 第二周作業

    Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp 文件復制     常用選項:            -i:交互式        …

    Linux干貨 2016-11-06
  • CentOS的軟件包的管理之rpm和yum

    在linux上,一個軟件包通常由二進制程序,庫文件,配置文件和幫助文件組成。 其中: 二進制程序一般都放在/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin和/usr/local/sbin這幾個目錄下邊; 庫文件都放在/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib和/usr/…

    Linux干貨 2017-04-23
  • wk_02 作業

    Linux 文件管理命令 cp命令 功能 Linux 系統中cp命令是用來復制目錄/文件的。 概要 單源復制 cp [OPTION]… [-T] SOURCE DEST DEST不存在則事先創建此文件,并復制源文件的數據流至DEST中; DEST存在 DEST是非目錄文件:則覆蓋目標文件; DEST是目錄文件:則先…

    Linux干貨 2016-12-11
  • Linux基礎學習總結(二)

    經過前兩周的學習,我們大家對于Linux系統和操作已經有了一定的認識?;贚inux平臺進行開發,確實要更方便和高效,我經過自己的學習消化,現在將自己的理解的幾點總結下來: Linux哲學思想的幾句話,簡潔的闡明了linux系統的特點。其中一切都是一個文件這句話特別精辟,在實際學習和操作linux系統之后,更是深刻體會到了這句話的內涵,感受頗深。它具體指明了…

    Linux干貨 2018-03-16
欧美性久久久久