vimtutor學習筆記


簡介

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:命令補全。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM