vim編輯器技巧備忘(初級-中級)

「學習vim而且其會成爲你最後一個使用的文本編輯器」
學習建議:html

  • 丟棄鼠標和小鍵盤
  • 具備搭配使用各類按鍵的意識

首先來一張 mindmap :shell

vim-learn-card

初級

編輯模式(Insert Mode)

編輯模式包括如下動做:vim

  • insert:i在光標所在字符前插入,I在當前行首第一個非空格字符前插入
  • append:a在光標所在字符後插入,A在行末尾開始插入
  • open:o在下一行插入新行,O在光標所在行的上一行插入新行
  • replace:r將光標處字符替換成r緊接的字符;R一直替換字符串,知道ESC鍵退出,同windows下的Insert鍵
  • Ctrl+p:自動提示
  • [ESC]:回到普通模式

vim-mode

普通模式(Normal Mode)

  • h, j, k, l,分別對應 左← 下↓ 上↑ 右→
  • :q, :q!, :wq 退出 不保存強行退出 保存退出segmentfault

  • 移動光標到當前行首/非空格,同^,:0windows

  • $ 移動光標到當前行尾,同:$
  • G 移動光標到文檔最後一行首
  • 30G 轉到第30行,同 :30
  • 9- 光標向上移動9行,同9k
  • 9+ 光餅向下移動9行,同9[space],9jbash

  • gg 轉到文檔第一行(1G)app

  • H 移動到屏幕的第一列
  • M 移動到屏幕的中間列
  • L 移動到屏幕的最後列編輯器

  • w 移動到下一個單詞的首字母,(標點符號認爲是一個單詞,W表示單詞以空格分隔)函數

  • e 移動到下一個單詞的末尾,(E認爲單詞以空格分隔)學習

  • b 移動到上一個單詞的首字母,(B認爲單詞以空格分隔)

  • fx 移動到下一個字母是x的位置。Fx向上移動。
  • % 匹配括號移動,包括 (, {, [ ,你須要把光標先移到括號上

  • CTRL+b 向上(前)翻頁

  • CTRL+f 向後翻頁

  • d 刪除開始。實際上是放到寄存器中,p或P命令調用。c即change,刪完進入編輯模式

  • d$ 刪除光標到行尾的全部文字,同D。C指令進入編輯模式
  • dw 刪除當前字符到單詞尾的全部字符。cw刪除光標後的單詞並進入插入模式,等同替換
  • dd 刪除當前一行
  • 2dd 刪除當前兩行
  • x 剪切光標處字符,能夠p粘貼出來

  • y 複製開始。yank起來,p或P命令調用

  • yy p 複製當前行並粘貼到下一行
  • 5yy p 複製當前行如下5行,在合適的地方粘貼
  • yw p 複製一個單詞並粘貼。
  • yi{ 複製光標所在{}中的內容。很容易知道ci{ 和 di " 的意思。

  • u 撤銷

  • CTRL+r 重作
  • . 點號重複作上一個命令
  • ``.` 移動光標到上一次的修改點

  • Ctrl+g 查看我當前位置

命令模式

  • /word 向下查找word,n定位到下一個。?word 向上開始查找,同/word配合N。*直接查找光標所在處單詞
  • :%s/word1/word2/g 替換全部word1爲word2(^$ [])
  • :set noic 區分大小寫 (即set no igorecase,set ic不區分大小寫)

  • :set nu 顯示行號。:set nonu相反,不顯示行號

  • :set paste 設置爲粘貼模式,解決Ctrl+Insert粘貼時縮進錯亂問題。:set nopaste設置回默認
  • :se ff=unix 設置文本文件的格式爲unix,去掉windows系統文件中的^M。

  • :!ls 執行bash下的命令ls,回車後繼續回到vi。通常在一個不存在的目錄中建立文件時用到

  • :set all 查看vim說有設置屬性值
  • :map 查看綁定的快捷鍵
  • :marks 查看可用標記

熟練上面的命令,已經能夠知足平常工做要求,要提升效率能夠學習vim的高級用法,如分屏顯示、分頁、標籤功能、代碼摺疊、鍵盤映射。

可視化模式

visual mode多用於用鍵盤靈活選擇文本。vV鍵進入,能夠實現同時編輯多行(如註釋)

中級

高級組合命令

  • :sh 暫時離開vi,進入shell命令行
  • :!ls !表示要執行一個shell命令
  • q: 調出歷史命令窗口
  • cc 替換一行,清空一行
  • cw 替換一個單詞,進入插入模式
  • ea 在當前單詞最後插入

  • vw visual模式選擇一個單詞

  • VU 全選一行,轉換成大寫
  • :5,12 co 13 將5至12行復制到第13行下

  • gg=G 自動縮排文件
    % : 匹配括號移動,包括 (, {, [. ,你須要把光標先移到括號上
    *#:匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)

當光標在( ), [ ],< >, { }, " ", '' 內時,能夠用ci, di, 或yi,加上(, [, <,{, ", '。這樣能夠改寫/刪除/複製( )內,[ ]內,< >內,{ }內," "內,' '內的內容。

多行註釋(塊操做)

  1. 首先按esc進入命令行模式下,按下Ctrl + v,進入列(也叫區塊)模式;
  2. 在行首使用上下鍵kj選擇須要註釋的多行;
  3. 按下鍵盤(大寫)I鍵,進入插入模式;
  4. 而後輸入註釋符(「//」、「#」等);
  5. 最後按下esc

刪除多行開頭的一個字符與此相似,刪除多個字符也只要左右鍵,而後使用d。

另一種多行註釋的方式就是替換:

  • :5,9s/^/#/g 添加註釋#
  • :5,9s/^#//g 刪除註釋#
  • :5,9s#^#//#g 添加註釋//,同:5,9s/^/\/\/#/g
  • :5,9s#^//##g 刪除註釋//

多行縮進
[ESC], Ctrl+v 選擇行 <或>左右縮進,=自動縮進(gg=G的局部功能)

多行行末尾加上 >> ${log}:Ctrl+v /^echo
>>至關於tab鍵,一個縮進

多行刪除

  1. 首先在命令模式下,輸入set nu顯示行號;
  2. 經過行號肯定你要刪除的行;
  3. 命令輸入:32,65d,回車鍵,32-65行就被刪除了

自動補全
在Insert模式下,你能夠輸入一個詞的開頭,而後按 <C-p>或是<C-n>,自動補齊功能就出現了

分屏(split)

分割窗口(同時編輯多個文件)

  • vi -o file1 file2 水平分屏,也能夠在先打開file1後,使用:sp file2
  • vi -O file1 file2 垂直分屏,也能夠在先打開file1後,使用:vsp file2
  • Ctrl+w w 光標切換到另外一個屏
  • k 關閉當前窗口,若是有改動則提示要先保存。:wqa!保存退出全部文件
  • Ctrl+w v 左右分割當前打開的文件。Ctrl+w s上下分割顯示
  • Ctrl+w H 左移該屏(大寫,L右移,K上移—改變vertical爲horizontal)
  • :set scb 分屏同步滾動

另一種不分屏,同時編輯多個文件的方法

vi file1 file2

  • :ls 展現所有打開的文檔。其中 % 表明正在打開的文件(buffer),# 表明上一個編輯過的文件,a 表明當前激活的buffer空間,+ 表明有修改過的內容但還未保存
  • :buffer 2 轉到打開的第二個文件。或簡寫爲 :b2
  • :bn 轉到下一個文件。沒有保存不能離開這個文件。:bp 上一個文件
  • :b# 轉到上一個編輯過的文件,同 :e #。相似於多屏中Ctrl+w w
  • :e file3 編輯一個新的文件
  • Ctrl+g 顯示當前文件名和行號,同 :f

摺疊(fold)

主要應用在複雜腳本的場合,特別是函數比較多,邏輯結構比較複雜的代碼。(:help folding
有6種方式來摺疊代碼

  1. manual //手工定義摺疊
  2. indent //用縮進表示摺疊
  3. expr  //用表達式來定義摺疊
  4. syntax //用語法高亮來定義摺疊
  5. diff //對沒有更改的文本進行摺疊
  6. marker //用標誌摺疊

indent
:set foldmethod=indent 設置縮進摺疊,fdm爲簡寫。只對當前會話有效,要使每次打開vim時摺疊都生效,則在.vimrc文件中添加設置,如添加:set fdm=indent

  • zc 摺疊與當前縮進相同的行
  • zo 打開摺疊
  • zj 移到下一個摺疊處
  • zk 移到上一個摺疊處
  • zm 摺疊全部可摺疊標記
  • zr 展開全部摺疊
  • [z 到當前打開摺疊的開始
  • ]z 到當前打開摺疊的結束

marker
注意與後文的mark不是同一東西,:set fdm=marker

  • zf 建立marker,默認 #{{{,#}}}
  • Ctrl+v zf 進入可視化模式,選擇須要摺疊的行,zc執行摺疊。會自動加入 #{{{ code block #}}}
  • zf9j 建立從當前行起至如下9行的摺疊標記,zc進行摺疊。同9zf。相似有zf30G,從當前行摺疊刀第30行
  • zf% 建立匹配的 {}, [], (), <> 的fold。不用執行zc
  • zd 刪除當前行上存在的摺疊標記。僅當 'foldmethod' 設爲 "manual" 或 "marker" 時有效

標記

標記(mark)是vim提供的精肯定位技術,只要你知道標記的名字,就可使用命令直接跳轉到該標記所在的位置。vim中的標記都有一個名字,這個名字用單一的字符表示。大寫和小寫字母(A-Za-z)均可以作爲標記的名字,這些標誌的位置能夠由用戶來設置;而數字標記0-9,以及一些標點符號標記,用戶不能進行設置,由vim來自動設置。(:help mark-motions查看更多幫助)

  • ms 定義一個標記s
  • `s 跳轉到標記s的地方
  • 's 跳轉到調劑s所在行首
  • `. jump to position where last change occurred in current buffer
  • `` jump back (to position in current buffer where jumped from)
  • :delmarks aA。使用:delmarks!刪除全部小寫(a-z)的標記
  • :marks 查看全部標記

插件

待續

vimrc

.vimrc 是目前本身用的比較習慣的vim風格。

參考


原文連接地址:http://seanlook.com/2014/08/07/vim-tips/

相關文章
相關標籤/搜索