vim学习笔记(四)
下面是我的最近更新,差點刪除。
下面的筆記摘自vimtutor。<CR>表示回車
?
刪除命令
在normal模式下:
de 刪除一個單詞,不包含空格
dw 刪除一個單詞,包含空格
dd 刪除當前行
1,10d 刪除指定行,第1到10行
ndd ?刪除當前行及其后n-1行
d$ 刪除當前行光標到行末的字符
d0 ? ? 刪除光標所在處到該行的最前面的第一個字符
dG ? ?刪除光標所在到最后一行的所有數據
d1G ?刪除光標所在到第一行的所有數據
?
刪除命令d的格式
? ? ? ? ? [number] ? ? ?d ? ? ?object =>e|w|$
特殊? ? 2 ? ? ? ? ? ? ? ?dd ? ? ? ? 當前行
ndd ??n代表一個數字,刪除光標所在的向下n行
?
x ? ? ? 向后刪除一個字符,相當于Delete
X ? ? ?向前刪除一個字符,相當于BackSpace
nx ? ? n代表一個數字,連續向后刪除n個字符
c ? ? ? 重復刪除多個數據,例如向下刪除10行,10cj
?
dnl ? ? 向右刪除n個字母
?
dnh ? ?向左刪除n個字母?
dnj ? ? 向下刪除n行
?
dnk ? ?向上刪除n行
?
c ? ? 改變文本
cnw[word] ? 將n個word改變為word
?
C$ ? ? 改變到行尾
?
cc ? ?改變整行
?
?
?
撤銷類命令
u ? ? ? ? ? ?撤銷最后一次執行的命令
U ? ? ? ? ? ?恢復該行的原始狀態,撤銷一行中所做的任何改動
Ctrl+R ? ?撤銷以前的撤銷命令
. ? ? ? ? ?(小數點)重復前一個操作
?
粘貼命令
輸入dd刪除該行,再將光標移到要插入行的上一行,按p,粘貼到指定的位置,注意:要在第20
行插入一行,就將光標放到第19行,使用p將已經刪除的文本內容置于光標之后
?
替換類命令
更改字符
將光標移到要修改的字符位置上,按r,再按要輸入的字符,就可更改該字符。比如:要將a->e, 按r,e可更改a為e
這就是說,輸入r和要替換掉原位置字符的新字符即可。
?
改變一個單詞的全部或是部分
將光標移到單詞lubw->line中的u字母位置,輸入cw,進入插入狀態,輸入要更改的字符(ine),按ESC返回normal狀態,繼續修改下一個單詞
同樣,c$ 更改本行,將光標移到第一個錯誤位置處
cw[newword] ?替換為newword
?
(移動)定位及文件狀態
space ? ? ? ? ?光標右移一個字符
?
Backspace ? 光標左移一個字符
?
Enter ? ? ? ? ? 光標下移一行
gg ?移動文件的第一行
G ? ?移動文件的最末行
nG ?移動到這個文件的第n行,這里n是一個具體的數字,比如20G
Ctrl+G ? 顯示當前行號,當迷失位置時,使用該命令查看
?
行間移動
0 ? ?數字0,移動到行首的命令
$ ? ?移動到行尾的命令
^ ? ?移動到行首的第一個空白符
n$ ?光標移至第n行尾
n[Enter] ? 光標向下移動n行
+ ? ?光標移動到非空格符的下一行
- ? ? 光標移動到非空格符的上一行
f<a> ?移動光標到當前行的字符a上
?
F ? ? 相反
?
% ? ?移動到與制匹配的括號上去(),{},[],<>等
?
字符移動
h/j/k/l ? ? ?左下上右
?
在一行中,單詞間移動
w ? ? ?移動光標到下一個單詞詞首
W ? ? 移動到下一個單詞(跳過標點符號)
b ? ? ?移動光標到上一個單詞詞首
e ? ? ?移動光標到下一個單詞詞尾
ge ??移動光標到上一個單詞詞尾
]s ? ?移動光標到下一個拼寫有錯誤的單詞
[s ? ?移動光標到上一個拼寫有錯誤的單詞
?
段落/區塊
{ ? ? ?跳到上一段(以空白行分隔)
} ? ? ?跳到下一段(以 空白行分隔)
[{ ? ?跳到當前區塊開頭
]} ? ?跳到當前區塊結尾
?
搜索命令
順序查找
在正常模式下,輸入/以及尾隨的字符串可以在當前文件中查找該字符串
/errror 回車
要繼續查找同一個字符串,按n,逆序查找,輸入N
逆序查找
?errror 回車
繼續逆序查找同一個字符串,按n;要順序查找,輸入N
如果查找已經到文件末尾,會自動從文件頭部繼續查找
按q/或者q?命令在vim窗口最下面打開一個新窗口,列出查找歷史,按:q退出,修改原查找項,按Enter繼續查找
查找配對的括號),],}
將光標放在(,[,{之一處,按%會自動將光標跳轉到另一個配對的括號處,再按%會返回到先前的括號處,此功能便于程序的調試
設置可使查找或是替換忽略大小寫的命令選項
比如查找ignore,在正常模式下輸入/ignore,再輸入
:set ic ?表示忽略大小寫
再輸入
:set hls is 分別表示高亮(highlight search)和增量搜索(inc search)
會發現查找的單詞ignore會反黃顯示,
?
# ? ? 往前搜尋當前光標所在的word
* ? ??往后搜尋當前光標所在的word
fx ? 當前行往后搜索word x
gd ? 跳轉到當前光標所在的word的定義位置(變量或是函數定義的地方)
?
c-f ? ?(即 ctrl 鍵與 f 鍵一同按下) 本命令即 page down.
?
c-b ? ?(即 ctrl 鍵與 b 鍵一同按下, 后同) 本命令即 page up.
?
?'' ? ? 此命令相當有用, 它移動光標到上一個標記處, 比如用 gd, * 等查找到某個單詞后, 再輸入此命令則回到上次停留的位置.
?
?'. ? ? 此命令相當好使, 它移動光標到上一次的修改行.
?
? `.????????????? 此命令相當強大, 它移動光標到上一次的修改點.
?
替換命令
將光標移到要替換的行,輸入
:s/old/new 回車 ?替換光標所在行的第一個匹配串
:s/old/new/g 回車 ?替換光標所在行的所有匹配串
:%s/old/new/g 回車 ?替換整個文件中的所有匹配串
除了g外,還有
N ?總共替換多少次
c ?commit,每次替換前要確認
?
復制文本
先y(yank抽出),把文本復制到文本寄存器中,再使用p粘貼到別處.注意:所有與“y”有關的復制命令都必須與“p”配合才能完成復制與粘貼功能。
p ? ?粘貼用x或d刪除的文本?
ynw 復制n個單詞
yw ?拷貝一個單詞,含單詞后面的空白字符
?
ye ? 拷貝一個單詞,不含空格
yy ? 拷貝一個整行
y$ ? 拷貝到行尾
nyy ? ? 復制光標所在的向下n行,這里n代表數字,比如20yy
y1G ? ?復制光標所在行到一行到第一行的所有數據
yG ? ? ?復制光標所在行到一行到最后一行的所有數據
y0 ? ? ?復制光標所在的那個字符到該行行首的所有數據
?
?
重復
. ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?重復上一次命令
N<command> ? ? ? ? ?重復某個命令N次,這里N是一個具體的數字,比如
3p ? ? ? ? ? ? ? ? ? ? ? ? ? 復制3次
10j ? ? ? ? ? ? ? ? ? ? ? ? ?向下移動10行
?
屏幕移動
H ? ? 光標移動到這個屏幕最上方的那一行的第一個字符
M ? ?光標移動到這個屏幕中央的那一行的第一個字符
L ? ??光標移動到這個屏幕最下方的那一行的第一個字符
?
?
翻頁/屏幕翻滾
Ctrl-B ? ? 向上翻頁 ?
Ctrl-F ? ??向下翻頁
Ctrl-u ? ??向上半屏
Ctrl-d ? ??向下半屏
注意:Ctrl-B和Ctrl-F前可以加上數字,表示向上或向下翻多少頁
nz ? ? ? ? ??將第n行滾至屏幕頂部,不指定n時將當前行滾至屏幕頂部
?
多窗口間移動
使用:sp可以在當前vim窗口縱向切割開一個子窗口,展示相同的內容,如果輸入的是:sp /etc/hosts之類的另一個文件名,則該子窗口打開一個不同的文件,
:split:分割一個窗口
?
:split file.c :為另一個文件file.c分隔窗口
?
?:nsplit file.c: 為另一個文件file.c分隔窗口,并指定其行數
?
多文件編輯
?
在一個 vim 程序中打開很多文件進行編輯是挺方便的.
?
?
:sp(:vsp) 文件名??? vim 將分割出一個橫(縱)向窗口, 并在該窗口中打開新文件.
?
????????????????????? 從 vim6.0 開始, 文件名可以是一個目錄的名稱, 這樣, vim 會
?
????????????????????? 把該目錄打開并顯示文件列表, 在文件名上按回車則在本窗口打
?
????????????????????? 開該文件, 若輸入 O 則在新窗口中打開該文件, 輸入 ? 可以看
?
????????????????????? 到幫助信息.
?
?
:e 文件名 ? ? ? ?vim 將在原窗口中打開新的文件, 若舊文件編輯過, 會要求保存.
?
?
c-w-w ? ? ? ? ? ?vim 分割了好幾個窗口怎么辦? 輸入此命令可以將光標循環定位
?
????????????????????? 到各個窗口之中.
?
?
:ls???????????????? 此命令查看本 vim 程序已經打開了多少個文件, 在屏幕的最下方
?
????????????????????? 會顯示出如下數據:
?
????????????????????? 1?? %a????? "usevim.html"???????? 行 162
?
????????????????????? 2?? #?????? "xxxxxx.html"???????? 行 0
?
?
????????????????????? 其中:
?
????????????????????? 1?????????????? 表示打開的文件序號, 這個序號很有用處.
?
????????????????????? %a ? ? ? ? ? ? 表示文件代號,
? ? ? ? ? ? ? ? ? ? ? % 表示當前編輯的文件,
?
? ? ? ? ? ? ? ? ? ? ? # 表示上次編輯的文件
?
????????????????????? "usevim.html"?? 表示文件名.
?
????????????????????? 行 162????????? 表示光標位置.
?
:b 序號(代號) ?此命令將指定序號(代號)的文件在本窗口打開, 其中的序號(代號)
?
????????????????????? 就是用 :ls 命令看到的.
?
?
:set diff?????????? 此命令用于比較兩個文件, 可以用
?
????????????????????? :vsp filename
?
????????????????????? 命令打開另一個文件, 然后在每個文件窗口中輸入此命令,就能看到效果了.
?
我們可以利用下面的命令在多個子窗口間移動
Ctrl-W ? ? ? ? ? ? ?在窗口中切換
Ctrl-W h/j/k/l ? ? ?在多個窗口間左下上右移動 ??
Ctrl-W q ? ? ? ? ? ?關閉子窗口
Ctrl-W H/J/K/L ? ?上下左右移動窗口的命令
?
相對于光標滾屏
zt ? 把光標所在行移動到窗口的頂端
zz ??把光標所在行移動到窗口的中間
zb ?把光標所在行移動到窗口的底部
?
模式切換
v ? ? ? ? ? ? ? 字符選擇,會將光標經過的地方反白選擇
Shift+V ? ? ?進入行選擇模式(就是大寫的V)
Ctrl+V ? ? ? ?進入列選擇或是塊選擇模式,或可視塊(visual block)
Shift+I ? ? ? ?進入列插入狀態
Shift+a ? ? ??進入塊插入狀態
y ? ? ? ? ? ? ? 將反白的地方復制出來
p ? ? ? ? ? ? ? 粘貼反白的地方
d ? ? ? ? ? ? ? 刪除反白的地方
?
visual 模式:
?
????v:進入visual 模式
?
????V:進入行的visual 模式
?
????ctrl+v:進如塊操作模式用o和O改變選擇的邊的大小
?
????在所有行插入相同的內容如include<,操作方法如下:
?
????將光標移到開始插入的位置,按CTRL+V進入VISUAL模式,選擇好模塊后按I(shift+i),后插入要插入的文本,按[ESC]完成
?
多文件編輯
可以使用vim來同時打開多個vim文件并進行編輯,比如vim ?hosts /etc/hosts來同時打開這兩個文件,以便于我們在多個文件之間復制數據
:n ? ? ? ? 編輯下一個文件
:N ? ? ? ?編輯上一個文件
:files ? ? 列出目前這個vim打開的所有文件
?
一般模式切換到編輯模式的按鈕
i ? ? ?(insert mode) ? ? ? 從當前光標處(光標前)插入
I ? ???(insert mode) ? ? ? 從當前行的第一個非空格符處開始插入(當前行首)
a ? ??(insert mode) ? ? ? 從當前光標的下一個字符開始插入(光標后)
A ? ??(insert mode) ? ? ?從當前行的最后一個字符開始插入(當前行首)
o ? ??(insert mode) ? ? ?從當前光標所在行之下插入新的一行
O ? ??(insert mode) ? ??從當前光標所在行之上插入新的一行
r ? ??(replace mode) ? ?替換光標所在的字符一次
R ? ?(replace mode) ? ?替換當前字符及其后的字符,直至按ESC鍵
s ? ?從當前光標位置處開始,以輸入的文本替代指定數目的字符
?
S ? ?刪除指定數目的行,并以所輸入文本代替之?
ncw或nCW ? ?修改指定數目的詞
?
nCC ? 修改指定數目的行
ESC ? 退出編輯模式,回到一般模式normal mode
?
一般模式切換到命令行模式的按鈕
:w ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 將數據寫入磁盤文件
:w! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?強制將數據寫入磁盤文件,寫入是否成功由文件權限決定
:e filename ? ? ? ? ? ? ? ? ? 打開文件filename進行編輯
?
:e! ? ? ? ?放棄修改文件內容,重新載入該文件編輯
:q ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?離開vim
:q! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 強制離開vim,不保存修改后的文件
:wq ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 保存文件后離開vim
:wq! ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?強制保存后離開vim
ZZ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?若文件沒有修改,不保存離開;否則,保存后離開
ZQ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不保存退出
:w [filename] ? ? ? ? ? ? ? ? ? 另存文件
:r [filename] ? ? ? ? ? ? ? ? ? ? 將filename文件的數據加到當前光標所在行后面
:n1,n2w [filename] ? ? ? ? ? 將n1和n2行之間的內容另存為filename文件
:!command ? ? ? ? ? ? ? ? ? ? 暫離開vim,到命令行模式下顯示command執行的結果
:r!command:將命令command的輸出結果放到當前行
?
:n1,n2 write temp.c 將本文件中的n1,到n2行寫入temp.c這個文件中去
?
:read file.c 將文件file.c的內容插入到當前光標所在的下面
?
:0read file.c 將文件file.c的內容插入到當前文件的開始處(第0行)
?
:nread file.c 將文件file.c的內容插入到當前文件的第n行后面
?
:read !cmd :將外部命令cmd的輸出插如到當前光標所在的下面
?
自動補全
Crtl+N ? 下一個備選word
Ctrl+P ? 上一個備選word
Ctrl+X ? 自動補全tag名
Ctrl+F
?
進入vim的命令:???
?
vim filename :打開或新建文件,并將光標置于第一行首
?
vim +n filename :打開文件,并將光標置于第n行首
?
vim + filename :打開文件,并將光標置于最后一行首
?
vim +/pattern filename:打開文件,并將光標置于第一個與pattern匹配的串處
?
vim -r filename :在上次正用vim編輯時發生系統崩潰,恢復filename
?
vim filename….filename :打開多個文件,依次編輯
?
宏:
?
?q[a-z] ?開始記錄但前開始的操作為宏,名稱可為【a-z】,然后用q終止錄制宏
?
?reg ? 顯示當前定義的所有的宏,用@[a-z]來在當前光標處執行宏[a-z]
?
幫助:
?
????:help :查看幫助文檔,在這之中,按CTRL+] 進入超連接,按CTRL+O 返回。
?
????:help subject :看某一主題的幫助,ZZ 退出幫助
?
其它常用:
????:newtab ??新建標簽
????:gt ??轉至下一個標簽
????:gT ??轉到上一個標簽
????:au GUIEnter * simalt ~x ??啟動時最大化
?
書簽:
?
????m[a-z]:在文中做標記,標記號可為a-z的26個字母
?
????`a:移動到標記a處
?
?
"剪貼板" 緩沖-??? ' "xY ' 用于剪切或復制到一個名為x的緩沖區(Y 代表任何的
?
刪除或取樣命令), ' "xZ ' 用于粘貼內容(Z代表粘貼命令p 或 P); (其中x可以為
?
任何字母, 也可在跳轉到另一文件中時繼續生效(:e filename).
?
快速輸入字符
?? 在 vi 中, 不要求你輸入每一個字符, 可以有很多種方法快速輸入一些字符.
?
?? 使用 linux/unix 的同學一定有一個經驗, 在命令行下輸入命令時敲入頭幾個字符再按
?
TAB 系統就會自動將剩下的字符補齊, 假如有多個匹配則會打印出來. 這就是著名的命令
?
補齊(其實windows中也有文件名補齊功能). vi 中有許多的字符串補齊命令, 非常方便.
?
c-p(c-n) ? ? 在編輯模式中, 輸入幾個字符后再輸入此命令則 vi 開始向上(下)搜索開頭與其匹配的單詞并補齊, 不斷輸入此命令則循環查找. 此命令會在所有在這個 vim 程序中打開的文件中進行匹配.
?
c-x-l ? ? ? 在編輯模式中, 此命令快速補齊整行內容, 但是僅在本窗口中出現的文檔中進行匹配.
?
c-x-f ? ? 在編輯模式中, 這個命令表示補齊文件名. 如輸入:?/usr/local/tom 后再輸入此命令則它會自動匹配出:?/usr/local/tomcat/
?
abbr ? ? 即縮寫. 這是一個宏操作, 可以在編輯模式中用一個縮寫代替另一個字符串. 比如編寫java文件的常常輸入 System.out.println, 這很是麻煩, 所以應該用縮寫來減少敲字. 可以這么做:
?:abbr sprt System.out.println?
?以后在輸入sprt后再輸入其他非字母符號, 它就會自動擴展為System.out.println
?
?
8. 宏替換
?
?? vi 不僅可以用 abbr 來替換文字, 也可以進行命令的宏定義. 有些命令輸起來很費勁,
?
因此我把它們定義到 <F1>-<F12> 上, 這樣就很方便了.這些配置可以預先寫到 ~/.vimrc
?
(windows 下為 $VIM/_vimrc) 中, 寫進去的時候不用寫前面的冒號.
?
?
? :nmap <F2> :nohls<cr> ? ? ? ? ? ? ? ? 取消被搜索字串的高亮
?
? :nmap <F9> <C-W>w????????????????? 命令模式下轉移光標到不同窗口
?
? :imap <F9> <ESC><F9>?????????????? 輸入模式下運行<F9>
?
? :nmap <F12> :%s= *$==<cr> ? ? ? 刪除所有行尾多余的空格.
?
? :imap <F12> <ESC><F12> ? ? ? ? ? ?同上
?
?
? :java 中: (注, 這里為什么說 java 中, 因為以下定義對其他文件格式不起作用, 下文會說到如何實現這一點)
?
? :nmap <F3> :comp javac<CR>:mak -d . %<CR>
?
?????? 此命令用 javac 編譯 java 文件, 它會自動將光標定位到出錯點. 不過這需要定
?
?????? 義一個 javac.vim 文件在 $VIM/compiler 下, 在 javac.vim 里面只有兩行字:
?
????????? setlocal makeprg=javac
?
????????? setlocal errorformat=%A%f:%l:/ %m,%-Z%p^,%-C%.%#
?
?
? :nmap <F4> :comp ant<CR>:mak<CR>
?
?????? 此命令用 ant 編譯 java 文件, 它會自動將光標定位到出錯點. 一般來說, 安裝
?
?????? vim 后已經有了compiler/ant.vim文件, 因此這個命令可以直接使用. 但是需要
?
?????? 在當前目錄下有 build.xml 文件, 當然還必須安裝 ant 才行.
?
?
? :nmap <F5> :cl<CR>???????????????? 此命令用于查看所有的編譯錯誤.
?
? :imap <F5> <ESC><F5>
?
?
? :nmap <F6> :cc<CR>???????????????? 此命令用于查看當前的編譯錯誤.
?
? :imap <F6> <ESC><F6>
?
?
? :nmap <F7> :cn<CR>???????????????? 此命令用于跳到下一個出錯位置.
?
? :imap <F7> <ESC><F7>
?
?
? :nmap <F8> :cp<CR>???????????????? 此命令用于跳到上一個出錯位置.
?
? :imap <F8> <ESC><F8>
?
?
? :nmap <F11> :JavaBrowser<cr>
?
?????? 此命令用于在窗口左部分割出一個新窗口, 里面的內容是 java 的資源樹, 包括
?
?????? 本文件中出現的類, 類的成員變量及成員方法, 就好像 JCreator 表現的那樣.
?
?????? 在這個窗口中輸入 ? 會看到幫助. 嘿嘿, 很好用, 不過需要 ctags 支持.
?
? :imap <F11> <ESC><F11>
?
?
9. TAB
?
?? TAB 就是制表符, 單獨拿出來做一節是因為這個東西確實很有用.
?
?
?? <<????????????????? 輸入此命令則光標所在行向左移動一個 tab.
?
?? >>????????????????? 輸入此命令則光標所在行向右移動一個 tab.
?
?? 5>>???????????????? 輸入此命令則光標后 5 行向右移動一個 tab.
?
?? :12,24>???????????? 此命令將12行到14行的數據都向右移動一個 tab.
?
?? :12,24>>??????????? 此命令將12行到14行的數據都向右移動兩個 tab.
?
?
?? 那么如何定義 tab 的大小呢? 有人愿意使用 8 個空格位, 有人用4個, 有的用2個.
?
?? 有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 沒關系, vim 能
?
?? 幫助你.以下的設置一般也都先寫入配置文件中, 免得老敲.
?
?
?? :set shiftwidth=4?? 設置自動縮進 4 個空格, 當然要設自動縮進先.
?
?? :set sts=4????????? 即設置 softtabstop 為 4. 輸入 tab 后就跳了 4 格.
?
?? :set tabstop=4????? 實際的 tab 即為 4 個空格, 而不是缺省的 8 個.
?
?? :set expandtab????? 在輸入 tab 后, vim 用恰當的空格來填充這個 tab.
?
?
10. autocmd
?
??? 這個命令十分的強大, 可以用這個命令實現對不同的文件格式應用不同的配置; 可以
?
在新建文件時自動添加上版權聲明等等. 這些命令一般定義在 ~/.vimrc 這樣的配置文件
?
里面. 由于他很強大, 所以我不能給出很具體的說明, 只能舉幾個例子, 詳細的請看幫助.
?
?
? :autocmd!?????????????? 刪除所有之前的自動命令.
?
? autocmd FileType??????? java? source ~/.vim/files/java.vim
?
? autocmd FileType??????? java? source ~/.vim/files/jcommenter.vim
?
??? 以上兩條命令讓我在打開 java 文件時才應用后面提到的兩個配置文件.
?
? autocmd BufNewFile????? *.java? 0r ~/.vim/files/skeletons/java.skel
?
??? 以上這條命令讓我在新建 java 文件時自動加入 java.skel 文件的內容.
?
? autocmd BufNewFile????? *.java? normal gnp
?
??? 以上這條命令讓我在新建 java 文件時自動運行 gnp 命令, 這個命令進行一些特殊化
?
??? 處理, 比如將新 java 文件中的 __date__ 替換成今天的日期什么的.
?
?
?
總結
以上是生活随笔為你收集整理的vim学习笔记(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Weiss的数据结构与算法分析(C++版
- 下一篇: vim学习笔记(一)