簡介 vimtutor是vim這款知名的文本編輯器的學習工具/指南。語法如下。 -g選項和gvimtutor是啟動GUI版本的指南,需要系統支持,一般來說我們只需要鍵入這2種命令形式。 一種啟用英文,一種啟用中文,建議閱讀英文指南。 當我們運行vimtutor的時候,看到是有點類似於man手冊的幫助 ...
簡介
vimtutor是vim這款知名的文本編輯器的學習工具/指南。語法如下。
vimtutor [-g] [language]
gvimtutor
-g選項和gvimtutor是啟動GUI版本的指南,需要系統支持,一般來說我們只需要鍵入這2種命令形式。
# vimtutor
# vimtutor zh
一種啟用英文,一種啟用中文,建議閱讀英文指南。
當我們運行vimtutor的時候,看到是有點類似於man手冊的幫助文檔,但是它和man不同,man使用的是less命令來閱讀幫助文檔。
而vimtutor是調用了vim命令來打開文本類型的幫助文檔。這些文檔位於。
/usr/share/vim/vim74/tutor/tutor[.language]
其中的“.language”就是對應的語言,用戶可以根據自己的需求選擇。
並且vimtutor也不是直接編輯這些文檔,而是將對應的tutor文檔複製到臨時目錄下,再打開的,諸如“/tmp/tutorh6FaK0”。
而後即便你在文檔中任意修改並且保存退出了,這個臨時文件也會自動被清理掉,下次打開再複製一份新的。
因此,千萬不要直接使用vim命令去編輯vim的tutor文件,而是直接運行vimtutor這個命令即可!
vimtutor還有一個配置文件,有興趣的朋友可以看下。
/usr/share/vim/vim74/tutor/tutor.vim
vimtutor一共7個lesson,近1000行英文,推薦的閱讀時間是半小時,不過一般都不止,每隔一陣子就可以拿出來練練手。
一定要邊看邊練,最好寫個筆記或者博文,這樣子才好記憶,只看不練絕對不行!只看不練絕對不行!只看不練絕對不行!
Lesson 1
Lesson 1.1 移動游標
hjkl,四個命令用於移動游標。
h:最左邊的h表示游標向左移動一個字元。
l:最右邊的l表示游標向右移動一個字元。
j:由於形似向下的箭頭,所以它表示游標移動到下一行。
k:表示游標移動到上一行。
註意
當游標進行上下行切換的時候,它會儘可能保證游標所在位置不改動,例如原本在該行的第五個字元,那麼移動至下一行,也會儘量保證處於第五個字元處。
如果不小心敲了一個未知的命令,擔心出錯的話,可以按一次或者多次<ESC>來返回正常模式(normal mode),然後再重新鍵入正確的命令。
鍵盤上的上下左右箭頭按鍵也可以使用,但是如果你習慣的話,hjkl會更快。
Lesson 1.2 退出vim
1、鍵入<ESC>保證自己處於正常模式。
2、鍵入“:q! <ENTER>”,這樣可以退出vim編輯器並且不保存修改。
3、看到shell提示符的時候,再次鍵入“vimtutor <ENTER>”回到指南。
註意
“:q! <ENTER>”是不保存退出,後面會教如何保存退出。
Lesson 1.3 文本編輯-刪除
將游標移動到重覆的字元上,然後鍵入x命令,它用於刪除單個字元。
---> The ccow jumpedd ovverr thhe mooon.
Lesson 1.4 文本編輯-插入
---> There is text misng this .
---> There is some text missing from this line.
為了使得這兩行的文本內容一致,將游標移動到短的那行第一個需要插入的位置,然後鍵入i命令。
鍵入i命令後,左下角會出現如下,表示在游標所在處進入插入模式(insert mode)。
-- INSERT --
進入插入模式後可自行輸入文本,輸入完畢後,鍵入<ESC>返回正常模式,再移動游標至需要補充的字元位置,重覆上面那幾步,直到這兩行文本完全一致。
Lesson 1.5 文本編輯-附加
---> There is some text missing from th There is some text missing from this line. ---> There is also some text miss There is also some text missing here.
將游標移動至帶有“--->”標記的行,然後鍵入A命令。
它表示在游標所在行的行尾進入插入模式。
在插入模式中補全剩餘的字元,同樣是按<ESC>返回正常模式。
Lesson 1.6 編輯文件
重新打開一個ssh會話。嘗試使用vim編輯一個文件。
# vim test.txt
在vim編輯器中,使用剛纔所學習到的插入和刪除指令進行任意操作,然後使用以下命令保存並退出。
:wq <ENTER>
然後重新回到vimtutor,進入總結環節。
Lesson 1 總結
1、hjkl,左下右上移動字元。
2、如何使用vim編輯一個文件。
# vim FILENAME <ENTER>
3、如何退出vim。
:q! <ENTER> 不保存退出
:wq <ENTER> 保存退出
4、刪除一個字元命令:x。
5、游標處進入插入模式命令:i。行尾進入插入模式命令:A。
6、<ESC>可以返回正常模式,並且可以取消任何誤操作的/不想要的完成一半的指令。
Lesson 2
Lesson 2.1 刪除命令
---> There are a some words fun that don't belong paper in this sentence.
刪除這行文本中,多餘的單詞。
將游標移動至需要刪除的單詞的首字母處,然後按下dw,它會刪除當前游標處至下一個單詞的詞首(不包含)之間的字元。
即,如果游標在單詞首字母處,那麼命令dw可用於刪除整個單詞。重覆使用dw直至文本如下。
---> There are some words that don't belong in this sentence.
Lesson 2.2 更多刪除命令
---> Somebody typed the end of this line twice. end of this line twice.
將游標移動至該行文本多餘的位置,即第一個點號後面的空格字元。按下d$,可以刪除當前游標處至行尾的所有字元。
結果如下。
---> Somebody typed the end of this line twice.
Lesson 2.3 operator和motion
許多改變文本的命令都是由operator和motion所組成的。
operator motion
例如,一個刪除命令的結構是這樣的。
d motion
d:在這裡就是一個operator,可以理解為一種操作。
motion:表示operator的作用點/範圍,可以理解為作用域。
motion還有這些:
w:直到下一個單詞的詞首,不包含下一個單詞的首字母。
e:到達當前單詞的詞尾,包含詞尾字母。
$:到達行尾,包含行尾字母。
motion可以單獨使用,此時可以理解為移動,類似hjkl,只不過移動的範圍比較廣泛。
Lesson 2.4 motion計數
operator number motion
在使用motion的時候,可以為其增加一個計數,表示重覆幾次之意。
例如2w表示下兩個單詞的詞首。
先位於這行的行首,然後鍵入2w,3e和0試試看效果。
---> This is just a line with words you can move around in.
0:表示行首之意。
Lesson 2.5 使用計數來刪除
將游標移動至第一個大寫字母處,然後鍵入d2w,查看效果。
---> this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
operator number motion
的結合,操作更加方便快捷。
也可以將number寫在前面。
number operator motion
Lesson 2.6 在行上操作
由於經常需要遇到刪除整行的操作,因此設計者設計了dd命令用於刪除整行。
---> 1) Roses are red, ---> 2) Mud is fun, ---> 3) Violets are blue, ---> 4) I have a car, ---> 5) Clocks tell time, ---> 6) Sugar is sweet ---> 7) And so are you.
基於上面的文本,移動至第2行使用dd命令,然後移動至新的第3行使用2dd命令。
正確操作的話,文本會變為如下。
---> 1) Roses are red, ---> 3) Violets are blue, ---> 6) Sugar is sweet ---> 7) And so are you.
Lesson 2.7 撤銷
---> Fiix the errors oon thhis line and reeplace them witth undo.
使用x命令刪除這行文本中多餘的字元,使其變為如下。
---> Fix the errors on this line and replace them with undo.
刪除完畢後,按一下u,可用於撤銷剛纔的1次命令,觀察效果。
再按U,這個表示整行撤銷,觀察效果。
如果不小心撤銷錯了,也可以通過CTRL-R撤銷掉撤銷。
註:CTRL-R表示按住Ctrl鍵,然後在按一下(然後放開)字母r,大小寫r都可以。下同。
Lesson 2 總結
dw:刪除當前字元至下一個單詞的詞首,不包含下一個單詞的詞首字母。
d$:刪除當前字元至行尾。
dd:刪除整行。
number+motion:在motion前加上數字表示重覆次數,例如2w表示移動至下兩個單詞的詞首。
命令的一般格式如下。
operator [number] motion
operator:表示操作,做什麼之意。
number:表示重覆的次數。
motion:結合operator使用的時候表示操作的作用域,單獨使用的時候表示移動的範圍。
0:移動至行首。
u:撤銷上一次操作。
U:撤銷整行的操作。
CTRL-R:恢復撤銷。
Lesson 3
Lesson 3.1 PUT命令
---> d) Can you learn too? ---> b) Violets are blue, ---> c) Intelligence is learned, ---> a) Roses are red,
將游標移動到d那行,然後按dd刪除掉。
vim的刪除不會真正地刪除,而是將被刪除的內容放入vim內部的寄存器(register)中。
將游標移動到c那行,然後按p。可以看到被刪除的行出現在了游標的下一行。整個功能類似Windows的剪切粘貼。
---> b) Violets are blue, ---> c) Intelligence is learned, ---> d) Can you learn too? ---> a) Roses are red,
重覆上面的行為,直到文本按照abcd正確排序。
---> a) Roses are red, ---> b) Violets are blue, ---> c) Intelligence is learned, ---> d) Can you learn too?
Lesson 3.2 替換(replace)命令
---> Whan this lime was tuoed in, someone presswd some wrojg keys! ---> When this line was typed in, someone pressed some wrong keys!
我們要讓第一行的內容和第二行保持一致,第一行存在錯誤。
將游標移動至第一行第一個錯誤的位置,即“Whan”中的"a"的位置,鍵入r命令,再輸入需要替換的字元“e”。
r命令用於替換單個字元,它只會替換單個字元。重覆剛纔的行為,使得第一行和第二行完全一致。
Lesson 3.3 THE CHANGE OPERATOR
---> This lubw has a few wptfd that mrrf changing usf the change operator.
---> This line has a few words that need changing using the change operator.
將游標至第一行第一個錯誤的位置,即lubw中的u字元,鍵入ce。
鍵入之後會進入插入模式,鍵入所需要的正確字元即可。
ce表示刪除當前游標處至詞尾的字元然後進入插入模式。
change和replace的區別在於,前者會進入插入模式,而後者不會。
Lesson 3.4 更多的change
c number motion
和刪除一樣,可以結合重覆次數來change更多的文本。
將游標移動至第一行的some的首字母,然後試一下c$或者c8e。
---> The end of this line needs some help to make it like the second. ---> The end of this line needs to be corrected using the c$ command.
Lesson 3 總結
p:可以將剛纔刪除掉的存在於register中的內容再粘貼在游標的下一行處。如果刪除掉的內容不是整行,則放在游標的後面。
r:替換游標所在處的字元,不進入插入模式。
c:c+number+motion,change所需要修改的字元範圍的內容,會進入插入模式。
Lesson 4
Lesson 4.1 游標位置與文件狀態
在正常模式下,鍵入CTRL-G,會顯示出游標的位置和文件的狀態信息,類似如下。
"/tmp/tutor0Iryp7" line 485 of 970 --50%-- col 10-24
"/tmp/tutor0Iryp7":表示當前編輯的文件的文件名。
line 485 of 970:表示當前游標所在的行號以及文件的行數。
--50%--:表示當前游標所在的文件的百分比位置。
col 10-24:表示游標在本行所處的位置,如果行存在製表符的話,那麼會出現這個例子中的兩個數字,我想應該是數字小的將製表符理解為一個字元,數字大的將製表符理解為8個字元(預設)。
如果想要實時看到這些信息的話,可以通過set命令設置。
:set noruler
設置完成後,在視窗的右下角就可以實時顯示信息了。
490,23 50%
記住這個行號,485行。我們按G,可以跳轉至最後一行。再按gg,可以跳轉至第一行。
然後按485G,可以跳轉至第485行。
Lesson 4.2 搜索命令
鍵入“/PHRASE”,表示從游標處向下搜索PHRASE字元串。
/PHRASE
它會出現在視窗的底部,就像“:”命令那樣。
想要順著搜索方向搜索下一個PHRASE,鍵入n。
想要逆著搜索方向搜索下一個PHRASE,鍵入N。
如果是“?PHRASE”,表示從游標處向上搜索PHRASE字元串。
?PHRASE
當我們鍵入多次n之後,想回到剛纔所搜索的字元串的位置,可以使用CTRL-O回去。
如果我們回去的時候回過頭了,即鍵入的CTRL-O次數過多,可以使用CTRL-I再往下一級,它是CTRL-O的反義詞。
這個需要自己親自使用一下才知道。
另外,CTRL-O和CTRL-I是基於行的。拿CTRL-O來舉例說明。
按一下CTRL-O是回到上一次游標所在行。如果上一次和上兩次游標是在同一行,即便該行的不同位置的話,多次使用CTRL-O也只會回到該行1次。
當搜索到文件底部的時候,如果再按一次n,那麼搜索命令會從頭開始搜索,併在視窗底行列印一條信息。
search hit BOTTOM, continuing at TOP
如果我們不希望搜索命令自動從頭開始的話,可以設置該選項。
:set nowrapscan
再次搜索至底部就會有報錯信息了,並且不會從頭開始。
E385: search hit BOTTOM without match for: errroor
Lesson 4.3 括弧匹配搜索
%:用於匹配對應的另一半括弧。
---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
將游標放至上面文本中的任意一個括弧所在處,無論是以下哪一個。也無論是左括弧還是右括弧。
()[]{}
鍵入%命令觀察效果。
如果我們把游標放置括弧內部的話,那麼鍵入%,它會去尋找當前所在處對應的左括弧的位置。
Lesson 4.4 替換命令
---> thee best time to see thee flowers is in thee spring.
將游標移動至該行,無論該行的哪個位置,然後鍵入如下。
:s/thee/the
會將該行的第一個“thee”字元串替換為“the”,而後續的“thee”字元串則不會被修改。如果想要該行所有的“thee”都被替換的話,則使用該命令。
:s/thee/the/g
g表示global,全局之意。
還有其他幾種替換用法,如下。
:#,#s/old/new/g 這裡的#是數字,表示在第#行至第#行之間,執行行間全局替換。 :%s/old/new/g %是全文的意思,表示全文全局替換。 :%s/old/new/gc 多了一個c,表示每次替換都會咨詢用戶是否替換,應該是check之意。
Lesson 4 總結
CTRL-G:顯示游標位置和文件狀態。
G:移動至行尾。
number+G:移動至具體的某一行。
gg:移動至首行。
/phrase:向下搜索phrase字元串。
?phrase:向上搜索phrase字元串。
n:順著搜索方向查找下一個phrase。
N:逆著搜索方向查找下一個phrase。
CTRL-O:回到剛纔的位置。
CTRL-I:去往下一個新位置。
%:跳轉至另一半括弧或者游標所在處最近的左括弧。
:s/old/new:當前游標所在行第一個old替換成new。
:s/old/new/g:當前游標所在行所有的old替換成new。(全局,global)
:#,#s/old/new/g:行間全局替換。
:%s/old/new/g:全文全局替換。
:%s/old/new/gc:全文全局確認式替換。
Lesson 5
Lesson 5.1 如何執行一個外部命令
“:”允許用戶執行命令行命令(command-line command),例如“:set”系列命令。
而,“:!”則允許用戶執行外部shell環境的命令,並且還可以帶命令參數。
在vim中執行外部命令時使用tab可以實現類似bash中的命令補全和路徑補全,不同點在於,它有點類似於輪詢補全(個人叫法)的樣子。
Lesson 5.2 更多寫文件的方式
在vim中執行該命令,可以將文件目前編輯的樣子保存至另一個文件中,有點類似於另存為的操作。
:w /PATH/TO/TEST.txt
Lesson 5.3 選取文本寫入
有時候我們要操作的motion,並不是一個規則的部分。
比如,一個字元、單詞、句子、行、段落或者全文等。
如果想選取一部分不規則的內容用於操作的話,可以使用v命令。
鍵入v後,就進入了visual模式(個人叫法),底行會有一行提示。
-- VISUAL --
此時可以使用各種motion(hjklweb0$^等等)來選取用戶所需要的文本。
選取好之後鍵入“:”。此時底行顯示為。
:'<,'>
接下來就可以將選取的文本保存至某個文件了。
:'<,'>w TEST
如果TEST文件已存在的話,則需要使用“!”來強制覆蓋。
:'<,'>w! TEST
通過visual模式選擇完畢後,除了可以使用w命令另存為以外,還可以使用別的operator,例如d刪除,y複製等。
Lesson 5.4 檢索與合併文件
:r FILENAME
此命令可以在游標所在行的下方插入所讀取的文件的內容。
“:r”還可以用於讀取外部命令的輸出。
:r !ls
Lesson 5 總結
:!command
執行外部shell命令。
:w FILE
將當前在編輯的vim文件狀態另存為其他文件。
使用v命令進入visual模式,可以選擇不規則的文本區域,再結合其他的operator使用。
:r FILENAME
:r COMMAND-OUTPUT
將外部文件的內容或者外部命令的輸出結果插入當前游標所在行的下麵。
Lesson 6
Lesson 6.1 open命令
o:在游標所在行的下方打開一個新行併進入插入模式。
O:在游標所在行的上方打開一個新行併進入插入模式。
Lesson 6.2 append命令
---> This li will allow you to pract appendi text to a line.
---> This line will allow you to practice appending text to a line.
a:在游標所在字元的後方進入插入模式。
註意:i、I、a和A都可以進入插入模式,區別在於進入插入模式的位置不同罷了。
Lesson 6.3 另一種替換(replace)方式
---> Adding 123 to xxx gives you xxx. ---> Adding 123 to 456 gives you 579.
R:進入連續的替換模式(replace mode),直到<ESC>。
將游標移動至第一個xxx的首字母處,鍵入R。此時底行會有替換模式的顯示。
-- REPLACE --
而後鍵入我們需要的正確字元,輸入完畢後<ESC>退回正常模式。
PS:要親自體會一下,和r不同。
反覆執行直到兩行文本內容一致。
替換模式類似於插入模式,不同之處在於沒鍵入一個字元就會刪除當前游標所在字元並且將游標後移一位。
Lesson 6.4 複製粘貼
y:複製文本,複製完的內容和d一樣進入vim的register。
p:粘貼register中的內容。
---> a) this is the first item.
b)
結合上述文本,快速將其變為如下。
可以通過visual模式複製,也可以通過y+number+motion複製。
---> a) this is the first item.
b) this is the second item.
Lesson 6.5 設置選項
當我們在搜索某個字元串的時候,預設是區分大小寫的。例如。
/ignore
則只會搜索全小寫的ignore,如果我們想同時搜索出Ignore和IGNORE的話,就需要設置忽略大小寫的選項。
:set ignorecase
它有對應的簡寫模式。
:set ic
除了忽略大小寫以外,還有高亮搜索和增量搜索。
:set hlsearch
:set incsearch
或者
:set hls is
設置完之後,再重新進行一次搜索,查看效果。
如果想關閉剛纔的設置,在其前面加上no即可。
:set noic
如果只是希望本次搜索的時候忽略大小寫,那麼可以加上“\c”。
/ignore\c
Lesson 6 總結
iIoOaA:不同方式進入插入模式。
e:移動至詞尾,如果結合operator的話,包含詞尾字元。
y:yank,複製。
p:paste,粘貼。
R:進入替換模式,直到遇到<ESC>才退出,不同於r。
:set [no]OPTIONS:設置各種選項,no表示關閉,選項有簡寫模式。
Lesson 7
Lesson 7.1 獲取線上幫助
進入vim之後,它支持靈活的線上幫助,可以通過一下方式進入。
按下<HELP>或者<F1>按鍵。或者鍵入。
:help
此時就會打開幫助文檔,視窗被分為上下2個。
使用CTRL-WW可以切換視窗。想要退出幫助的話,和退出vim是一樣的。
:q
但是要確保自己是位於幫助視窗中。
可以在:help後加參數,查看對應的subject的幫助。
:help w :help c_CTRL-D :help insert-index :help user-manual
註意,在vimtutor中鍵入會報錯,可以自己vim一個臨時文件,來測試這個功能。
Lesson 7.2 創建一個啟動腳本
vim相對於vi,擁有更多的新特性,但是其中的大部分,預設是禁用的。
如果想啟用的話,需要用戶自己編輯“~/.vimrc”配置文件。
:e ~/.vimrc
然後讀取模板配置文件。
:r $VIMRUNTIME/vimrc_example.vim
然後保存退出。
詳見:
:help vimrc-intro
Lesson 7.3 補全
首先確保vim沒有處於相容模式下。
:set nocp
而後使用外部命令查看當前文件列表。
:!ls
鍵入“:e”,按CTRL-D
通過<TAB>切換至edit,然後輸入後續的文件名,文件名也可以通過<TAB>補全。
Lesson 7 總結
鍵入<F1>、<HELP>或者“:help”進入幫助模式。
“:help subject”:查看指定內容的幫助。
CTRL-WW:切換視窗,退出幫助要確保自己位於幫助視窗。
創建“~/.vimrc”啟動腳本,即配置文件。
CTRL-D:命令補全。