vim文本編輯器(工具)
vim模式
- 編輯模式(命令模式,默認進入編輯),例如粘貼,刪除
- 輸入模式(i,a,o)
- 末行模式(在編輯模式按:進入)
打開單個文件(如果沒有就新建),默認是處在編輯模式中
- vim FILENAME
- vim /path/to/somefile
- vim +# 文件 (打開文件處在#行)
- vim + 文件(打開文件處在最後一行)
- vim +/PATTERN :打開文件,定位至第一次被PATTERN匹配到的地方行首
移動光標:h l j k
#h 移動#個字符
以單詞爲單位移動:w移至下一個單詞的詞首,
e跳至當前或下一個單詞的詞尾
b跳至當前或前一個單詞的詞首
#w 移至#單詞的詞首
行內跳轉
0:絕對行首
^: 行首的第一個非空白字符
$:絕對行尾
行間跳轉
#G:跳轉至第#行
G:最後一行
末行模式下,直接給出行號即可
翻屏:
ctrl+f 向下翻一屏
ctrl+b 向上翻一屏
ctrl+d 向下翻半屏
ctrl+u 向上翻半屏
刪除單個字符
x:刪除光標所在處的單個字符
#x:刪除光標所在處及向後的共#個字符
刪除命令:d
d命令跟跳轉命令組合使用
#dw(刪除#個單詞),#de,#db
dd:刪除當前光標所在行
#dd:刪除包括當前光標所在行內的#行
末行模式下:
StartADD,EndADDd
.:表示當前行
$:表示最後一行
+#:向下的#行
:.,+3y表示當前行及向下3行進行復制
粘貼命令P
P:如果刪除或複製爲事整行內容,則粘貼至光標據的下方,如果複製或刪除的內容爲非整行,則粘貼至光標所在字符的後面
p:如果刪除或複製爲整行內容,則粘貼至光標所在行的上方,如果複製或刪除的內容爲非整行,則粘貼至光標所在字符的前面
複製命令y,用法同d命令
修改:先刪除內容,再轉換爲輸入模式
c:用法同d命令
替換:r
R:進入替換械,esc退出替換模式
撤消前一次的編輯操作 u
u:撤消前一次的編輯操作
連續u命令可撤消此前的n次操作(n不會大於50,因爲內存只保留了前50次的操作)
#u:直接撤消前#次操作
重複前一次編輯操作
.
可視化模式
v:按字符選取
V:按矩形選取
查找
/PATTERN 向後查找
?PATTERN 向前查找
n
N
查找並替換
在末行模式下使用s命令
使用vim編輯多個文件
vim FILE1 FILE2 FILE3
:next 切換至下一個文件
:prev 切換至上一個文件
:last 切換至最後一個文件
:first 切換至第一個文件
:qa 退出全部文件
分屏顯示
ctrl+w, s:水平拆分窗口
ctrl+w, v:垂直拆分窗口
在窗口間切換
ctrl+w, ARROW
:qa 關閉所有窗口
分窗口編輯多個文件
vim -o :水平分割顯示
vim -O :垂直分割顯示
將當前文件中部分內容另存爲另外一個文件,末行模式下使用命令w
:w
:ADDR1,ADDR2w /path/to/somewhere
將另外一個文件的內容填充在當前文件中
:r /path/to/somefile
跟shell交互
:! COMMAND
替換
- :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/表示行尾。
- 所有替換命令末尾加上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得到更多幫助。
#從3行到6行,第2個字符後面添加空格
一些按鍵
- gd: 跳轉到局部變量的定義處;
- gD: 跳轉到全局變量的定義處,從當前文件開頭開始搜索;
- g;: 上一個修改過的地方;
- g,: 下一個修改過的地方;
- [[: 跳轉到上一個函數塊開始,需要有單獨一行的{。
- ]]: 跳轉到下一個函數塊開始,需要有單獨一行的{。
- []: 跳轉到上一個函數塊結束,需要有單獨一行的}。
- ][: 跳轉到下一個函數塊結束,需要有單獨一行的}。
- [{: 跳轉到當前塊開始處;
- ]}: 跳轉到當前塊結束處;
- [/: 跳轉到當前註釋塊開始處;
- ]/: 跳轉到當前註釋塊結束處;
- %: 不僅能移動到匹配的(),{}或[]上,而且能在#if,#else, #endif之間跳躍。