「學習vim而且其會成爲你最後一個使用的文本編輯器」
學習建議:html
首先來一張 mindmap :shell
編輯模式包括如下動做:vim
i
在光標所在字符前插入,I
在當前行首第一個非空格字符前插入a
在光標所在字符後插入,A
在行末尾開始插入o
在下一行插入新行,O
在光標所在行的上一行插入新行r
將光標處字符替換成r緊接的字符;R
一直替換字符串,知道ESC
鍵退出,同windows下的Insert鍵Ctrl+p
:自動提示[ESC]
:回到普通模式h, j, k, l
,分別對應 左← 下↓ 上↑ 右→ :q, :q!, :wq
退出 不保存強行退出 保存退出segmentfault
移動光標到當前行首/非空格,同^,:0windows
$
移動光標到當前行尾,同:$G
移動光標到文檔最後一行首30G
轉到第30行,同 :309-
光標向上移動9行,同9k9+
光餅向下移動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多用於用鍵盤靈活選擇文本。v
或V
鍵進入,能夠實現同時編輯多行(如註釋)
:sh
暫時離開vi,進入shell命令行:!ls
!表示要執行一個shell命令q:
調出歷史命令窗口cc
替換一行,清空一行cw
替換一個單詞,進入插入模式ea
在當前單詞最後插入
vw
visual模式選擇一個單詞
VU
全選一行,轉換成大寫:5,12 co 13
將5至12行復制到第13行下
gg=G
自動縮排文件%
: 匹配括號移動,包括 (, {, [. ,你須要把光標先移到括號上*
和 #
:匹配光標當前所在的單詞,移動光標到下一個(或上一個)匹配單詞(*是下一個,#是上一個)
當光標在( )
, [ ]
,< >
, { }
, " "
, ''
內時,能夠用ci
, di
, 或yi
,加上(
, [
, <
,{
, "
, '
。這樣能夠改寫/刪除/複製( )
內,[ ]
內,< >
內,{ }
內," "
內,' '
內的內容。
多行註釋(塊操做)
esc
進入命令行模式下,按下Ctrl + v
,進入列(也叫區塊)模式;kj
選擇須要註釋的多行;I
鍵,進入插入模式;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鍵,一個縮進
多行刪除
set nu
顯示行號;:32,65d
,回車鍵,32-65行就被刪除了自動補全
在Insert模式下,你能夠輸入一個詞的開頭,而後按 <C-p>
或是<C-n>
,自動補齊功能就出現了
分割窗口(同時編輯多個文件)
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
主要應用在複雜腳本的場合,特別是函數比較多,邏輯結構比較複雜的代碼。(:help folding
)
有6種方式來摺疊代碼
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待續
.vimrc 是目前本身用的比較習慣的vim風格。
參考