1、說明vim
掌握vim的操做技巧能讓運維的工做事半功倍,本文將羅列出運維平常使用到的操做技巧,不太經常使用的操做,本文沒有收集,有高要求有興趣的能夠百度查閱vim專題運維
2、經常使用技巧ide
1)普通模式:移動光標的操做命令行
指令 | 做用 |
---|---|
G或者(Shift+g) | 光標瞬移到文件的最後一行 |
gg | 光標瞬移到文件的第一行,命令等同於「1G」 |
0(數字0)或者^ | 光標瞬移到當前行的行首 |
$ | 標瞬移到當前行的行尾 |
b | 光標瞬移到當前位置的單詞的單詞首字母處 |
e | 光標瞬移到當前位置的單詞的單詞尾字母處 |
w | 光標瞬移到當前位置的單詞的下一個單詞的單詞首字母處 |
f+字母 | 光標往右瞬移到指定的「字母處」,若是指定的字母有重複,則默認跳轉到從左至右的第一個 |
F+字母 | 光標往左瞬移到指定的「字母處」,若是指定的字母有重複,則默認跳轉到從右至左的第一個 |
num+回車鍵 | 光標從當前行位置向下移動num行(num是數字) |
num+gg | 光標移動到文件的第num行,命令等同於「num+G」 |
H或者(Shift+h) | 光標瞬移到當前窗口最上面的那一行 |
M或者(Shift+m) | 光標瞬移到當前窗口中間的那一行 |
L或者(Shift+l) | 光標瞬移到當前窗口最下面的那一行 |
h或者← | 光標向左移動一個字符 |
j或者↓ | 光標向下移動一個字符 |
k或者↑ | 光標向上移動一個字符 |
l或者→ | 光標向右移動一個字符 |
< | 光標所在的一整行向左縮進 |
> | 光標所在的一整行向右縮進 |
2)普通模式:搜索與替換操做字符串
指令 | 做用 |
---|---|
:/dabiaoge | 從光標位置開始,向下搜索名爲dabiaoge的字符串 |
:?dabiaoge | 從光標位置開始,向上搜索名爲dabiaoge的字符串 |
r | 用光標選中字符,按下「r」,並輸入替換的新內容,則能夠把選中的字符修改爲新內容 |
n | 從光標位置開始,向下重複前一個搜索動做 |
N | 從光標位置開始,向上重複前一個搜索動做 |
:g/A/s//B/g | 把全文符合A的內容所有替換成B,斜線都是分隔符,可用"@"和"#"代替(注意中間s後面是兩個斜線) |
:%s/A/B/g | 把全文符合A的內容所有替換成B,斜線都是分隔符,可用"@"和"#"代替(這個操做和「g/A/s//B/g」如出一轍的效果) |
:num1,num2s/A/B/gc | 在第num1行和第num2行之間尋找A,而且把所有的A替換成B(後面的gc的c表示再次肯定,若是確認就輸入y,也能夠不用c,若是直接就是g,則是不用肯定而且當即生效) |
3)普通模式:複製、粘貼、刪除等操做it
指令 | 做用 |
---|---|
yy | 複製光標當前所在的一整行 |
num+yy | 複製從光標所在行的這一行起向下的num行(光標所在的行爲第一行) |
小p、大P | 小p表示將已複製的數據粘貼到光標所在行的下一行;而大P表示將已複製的數據粘貼到光標所在行的上一行 |
dd | 刪除當前光標所在的一整行 |
num+dd | 刪除從光標所在行開始向下的num行(光標所在的行爲第一行) |
u | 撤銷(回滾)前一個執行過的操做 |
. | 就一個點號,表示重複前一個執行過的操做 |
4)普通模式:平常高技巧的操做table
指令 | 做用 |
---|---|
daw | 刪除光標所在單詞以及單詞前的一個空格(d就是刪除的指令,aw就是光標所在單詞加上前一個空格) |
gUgU | 把光標所在行的一整行的小寫字母所有轉成大寫字母(本來就有的大寫字母則是忽略) |
gugu | 把光標所在行的一整行的大寫字母所有轉成小寫字母(本來就有的小寫字母則是忽略) |
g~g~ | 把光標所在行的一整行的字母大小寫互相調換,大寫變小寫,小寫變大寫 |
gU+t+字母 | gU就是轉爲大寫的操做指令,「t+字母」就是是表示從新定義光標在這一行的位置,而這個字母就是新的光標位置,若是同一行內有多個相同字母,則默認是第一個,表示從光標如今位置開始到「指定字母」這個位置止,之間的凡是小寫的字母所有轉成大寫字母 |
gu+t+字母 | gu就是轉爲小寫的操做指令,「t+字母」就是是表示從新定義光標在這一行的位置,而這個字母就是新的光標位置,若是同一行內有多個相同字母,則默認是第一個,表示從光標如今位置開始到「指定字母」這個位置止,之間的凡是大寫的字母所有轉成小寫字母 |
g~+t+字母 | g~就是轉爲大小寫互掉的操做指令,「t+字母」就是是表示從新定義光標在這一行的位置,而這個字母就是新的光標位置,若是同一行內有多個相同字母,則默認是第一個,表示從光標如今位置開始到「指定字母」這個位置止,之間的全部字母大小寫互掉 |
Ctrl+a(快捷鍵) | 把光標所在的數字加1 |
num+Ctrl+a | 把光標所在的數字加num(num是數字,不能是負數、0還有小數,必須是正整數) |
5)進入編輯模式的命令(一共就六種進入編輯模式的命令鍵)class
指令 | 做用 |
---|---|
i | 在當前光標所在處開始進入編輯模式 |
a | 在當前光標所在處的下一個字符處開始進入編輯模式 |
I | 在當前光標所在行的行首的第一個非空格符處開始進入編輯模式(與A正好相反) |
A | 在當前光標所在行的行尾最後一個字符處開始進入編輯模式(與I正好相反) |
O | 在當前光標所在行的上一行插入新的一行(也就是把當前光標所在的行下移一行,可是光標還在這一行,而且光標移動到行首) |
o | 不是數字0,是字母o,表示在當前光標所在行的下一行插入新的一行(與O正好相反) |
Esc | 退出編輯模式,切回到命令模式 |
6)命令行模式的命令可視化
指令 | 做用 |
---|---|
:wq或者x | 退出並保存 |
:wq!或者x! | 退出並強制保存,「!」爲強制的意思 |
:q! | 強制退出,但不保存 |
:num1,num2 w filename | 將第num1行到第num2行的內容保存到filename這個文件(filename文件無須提早建立) |
:num1,num2 co num3 | 將第num1行到第num2行的內容複製到第num3行的下面 |
:num1,num2 m num3 | 將第num1行到第num2行的內容移動(剪切)到第num3行的下面 |
:!任意命令 | 表示暫時離開vim頁面,轉到執行的那個命令的頁面,例如:!ls /root |
:set nu | 全部行都顯示行號 |
:set nonu | 取消行號(與「set nu」相反) |
:vs filename | 以垂直分屏的方式顯示,會左右顯示當前文件和filename文件的內容 |
:sp filename | 以水平分屏的方式顯示,會上下顯示當前文件和filename文件的內容 |
:,$d | 注意最前面有個逗號,表示刪除當前光標所在行以及後面的全部行(光標所在的那一行也刪除) |
:num,.d | 注意num和d之間有個逗號和點,表示刪除第num行到光標所在行的內容(光標所在的那一行也刪除) |
7)可視化模式百度
.......... | .......... |
---|---|
可視化模式類型分爲三種字符 | 可視化、行可視化、塊可視化 |
在普通模式下: | 按v(小寫),進入字符可視化 |
按V(大寫,也能夠Shift+v),進入行可視化 | |
按「Ctrl+v」,進入塊可視化 | |
什麼是可視化? | 就是一種控制選擇粒度的方案。 |
字符可視化 | 選擇粒度是一個字符,就是以字符爲單位,一次選擇一個字符 |
行可視化 | 選擇粒度是一整行,就是爲行爲單位,一次選擇一行 |
塊可視化 | 最強大的選擇粒度,沒有選擇單位,可自由選擇,選擇完的區域造成一個塊,因此叫塊可視化 |
下面羅列工做中用到可視化最經常使用的操做:
把連續的幾行代碼在行首部註釋掉:
步驟 | 指令 | 做用 |
---|---|---|
① | num1+gg | 把光標定位到須要註釋掉的幾行代碼的首行的行首 |
② | Ctrl+v | 進入塊可視化 |
③ | num2+gg | 把光標定位到須要註釋掉的幾行代碼的末行的行首(若是行數很少,就連續按↓或者j,直到末行爲止便可) |
④ | Shift+i」或者I | 在第一個非空格符處開始進入編輯模式 |
⑤ | 輸入「#」 | 通常的註釋符是「#」號,這裏也能夠輸入其餘的註釋符 |
⑥ | 按Esc退出 | 若是行數比較多,按下Esc不能當即給所選的全部行加上#號,須要等待1~2秒便可 |
既然有一次性註釋的方法,那麼也就有一次性取消註釋的方法:
步驟 | 指令 | 做用 |
---|---|---|
① | num1+gg | 把光標定位到須要取消註釋掉的幾行代碼的首行的行首 |
② | Ctrl+v | 進入塊可視化 |
③ | num2+gg | 把光標定位到須要取消註釋掉的幾行代碼的末行的行首 //若是行數很少,就連續按↓或者j,直到末行爲止便可 |
④ | 執行d刪除 | 便可刪除全部的「#」 |
把連續的幾行代碼在行尾部加上相同字符(好比C++代碼是在行尾部加「;」才能生效):
步驟 | 指令 | 做用 |
---|---|---|
① | num1+gg | 把光標定位到須要加「;」的幾行代碼的首行的行首 |
② | Ctrl+v | 進入塊可視化 |
③ | num2+gg | 把光標定位到須要註釋掉的幾行代碼的末行的行首 //若是行數很少,就連續按↓或者j,直到末行爲止便可 |
④ | $ | 光標瞬移到當前行的行尾 |
⑤ | 「Shift+a」或者A | 在最後一個非空格符處開始進入編輯模式 |
⑥ | 輸入「;」 | 添加「;」 |
⑦ | 按Esc退出 | 若是行數比較多,按下Esc不能當即給所選的全部行加上;號,須要等待1~2秒便可 |
一次性刪除N行代碼(我知道可用Ndd完成,這裏用行可視化完成)
步驟 | 指令 | 做用 |
---|---|---|
① | num1+gg | 把光標定位到須要刪除的幾行代碼的首行的行首 |
② | 「Shift+v」或者V | 進入行可視化 |
③ | num2+gg | 把光標定位到須要刪除掉的幾行代碼的末行的行首 //若是行數很少,就連續按↓或者j,直到末行爲止便可 |
④ | 執行d刪除 | 可刪除全部的被選中行 |
一次性刪除所選內容(這個用Ndd可完成不了,這裏用塊可視化完成)
步驟 | 指令 | 做用 |
---|---|---|
① | num1+gg | 把光標定位到須要刪除內容的起始行的行首 |
② | f+字母/數字 | 跳轉到須要刪除部分的起始位置 |
③ | Ctrl+v | 進入塊可視化 |
④ | num2+gg | 把光標定位到須要刪除部分的末尾部分所在行的行首 //若是行數很少,就連續按↓或者j,直到末行爲止便可 |
⑤ | 再次執行「f+字母/數字」 | 跳轉到須要刪除部分的結尾位置 |
說明 | 若是行數不是太多,須要刪除的部分所有在一個窗口內,則不用④和⑤那麼麻煩,直接使用「← ↓ ↑→」方向鍵來選定須要刪除的區域便可 | |
⑥ | 執行「d」刪除 | 可刪除全部的被選中部分 |
既然有添加和刪除,那麼必定也有替換:
步驟 | 指令 | 做用 |
---|---|---|
① | num1+gg | 把光標定位到須要替換內容的起始行的行首 |
② | f+字母/數字 | 跳轉到須要替換部分的起始位置 |
③ | Ctrl+v | 進入塊可視化 |
④ | num2+gg | 把光標定位到須要替換部分的末尾部分所在行的行首 //若是行數很少,就連續按↓或者j,直到末行爲止便可 |
⑤ | 再次執行「f+字母/數字」 | 跳轉到須要替換部分的結尾位置 |
說明 | 若是行數不是太多,須要替換的部分所有在一個窗口內,則不用④和⑤那麼麻煩,直接使用「← ↓ ↑→」方向鍵來選定須要替換的區域便可 | |
⑥ | 執行「r」 | 替換命令 |
⑦ | 輸入新的字符 | 輸入完便可 |