remember that you should be learning by doing, not memorization.
1.零散的一些東西!
a. ctrl-o 回到前一個位置(notice:type ctrl-t or ctrl-o <repeat to go further back>)
b. 移動光标,按“k”上移,按“j”下移,按“h”左移,按“l”右移。圖示如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauYzM2UzX0UTM2QzNzUzMx8CX0IzLcFTMyEDMy8CXzRWYvxGc19CX0Vmbu4GZzNmL51mLn1Wavw1LcpDc0RHaiojIsJye.jpg)
c.檢視系統的字元集:shell>echo $lang $language
d.如果你現在啟動vim,'compatible'選項應該是關閉的。下面的指令可以檢查它的設定:{:set compatible?}
如果結果是'nocompatible'就對了。如果是"compatible"可就麻煩了。你要找找看為什麼這個選項還是這樣
的設定。也許是上面的檔案沒找到。下面的指令可以告訴你它的位置:{:scriptnames}
如果你的配置檔案沒有在這個清單中,你需要檢查一下它的位置和名字。
如果在,那一定是别的什麼地方把 'compatible'選項給打開了。詳情請參考|vimrc|和|compatible-default|
e.進入vim教程,輸入該指令即可:[shell>vimtutor]
---->一些平日木有留心的地方:
------>note:pressing <esc> will place you in normal mode or will cacel an unwanted and partially completed command.
------>note:move the cursor to the beginning of a word that needs to be deleted. type 'dw' to make the word disappear.
------>note:type "d$" to delete to the end of the line! (d$可以用來删除整行!)
------>note: lesson 2.3:on operators and motions
many commands that change text are made from an operator and a motion.the format for a delete command with the d delete operator is as follow d motion
where:
d -- is the delete operator.
motion -- is what the operator will operate on (listed below).
a short list of motions:
w -- until the start of the next word,excluding its first character.
e -- to the end of the current word,including the last character.
$ -- to the end of the line,including the last character.
thus typing de will delete from the cursor to the end of the word.
------->note: pressing just the motion while in normal mode without an operator will move the cursor as specified.
------->note: a count between the operator d and the motion works similar to using the motion without an operator.???我做實驗怎麼發現d2w和2dw的效果一樣呢?
------->note: type dd to delete a whole line.and type 2dd to delete two lines.
------->note: lesson 2 summary
1. to delete from the cursor upto the next word type: dw
2. to delete from the cursor to the end of a line type: d$
3. to delete from a whole line type: dd
4. to repeat a motion prepend it with a number: 2w
5. the format for a change command is:
operator [number] motion
where:
operator - is what to do, such as d for delete
[number] - is an optional count to repeat the motion
motion - moves over the next to operator on ,such as w (word),$ (to the end of line),etc....
6. to move to the start of the line use a zero: 0
7. to undo previous actions,type; u (lowercase u)
to undo all the changes on a line ,type: u (capital u)
to undo the undo's ,type: ctrl-r
------->note: type r and then the character which should be there!!! ( ** type rx to replace the character at the cursor with x. **)
------->note: type ce and the correct word !!1 ( ** to change until the end of a word,type ce. **)
------->note: type c$ and type the rest of the line like the righ line and press <esc>。
------->note: lesson 3 summary 48% 繼續看!
f.将光标移到你想附加的位置,然後按[a],然後輸入對應的文字即可,最後輸入[esc],進入normal mode!
g.若是在其他系統上,要費點小事兒:
1.複制教程檔案。可以在vim中做(它知道檔案的具體位置):
shell>vim -u none -c 'e $vimsuntime/tutor/tutor' -c 'w! tutorcopy' -c 'q'
2.上面那一條指令結束之後,會在目前目錄下建立一個名為“tutorcopy”的檔案作為副本,要使用教程的某種語言的本地化版本,
隻需要在檔案名後面追加它的對應的兩個字元的語言代碼,比如對法語:
shell>vim -u none -c 'e $vimruntime/tutor/tutor.fr' -c 'w! tutorcopy' -c 'q'
h.用vim編輯這個副本
shell>vim -u none -c "set nocp" tutorcopy
這兩個參數會讓vim更happy一些
i.學完後把教程檔案删掉:
shell>del tutorcopy
j.首先鍵入的指令是 i (進入insert模式),接着插入“a young”,然後退出 insert 模式(最後的 <esc>)。
k.删除一行,删除一整行内容使用“dd”指令。删除後下面的行會移上來填補空缺。
l.删除換行符,在vim中你可以把兩行合并為一行,也就是說兩行之間的換行符被删除了:指令是 “j”。兩行,将光标移到第一行上然後按 "j"。
m.如果你誤删了過多的内容。顯然
n.删除換行符,在vim中你可以把兩行合并為一行,也就是說兩行之間的換行符被删除了:指令是“j”。将光标移到第一行上然後按“j”。
o.撤消和重做,如果你誤删了過多的内容。顯然你可以再輸入一遍,但是指令“u”更簡便,它可以撤消上一次的操作。
實際看一下它的效果,用“dd”指令來删除前面例子中的第一行内容,“u”指令會把它找回來。另一個例子:将光标移到第一行的a上:a young intelligent turtle
現在 用xxxxxxx來删除“a young”。結果如下:intelligent turtle
鍵入"u"來撤消最後的一次删除。最後被删除的是字元g,是以撤消操作恢複了這個字元,下一個u指令将恢複倒數第二次被删除的字元,再一次是字元u,如此如此。
備注:如果你按下“u”兩次結果是兩次找回了同樣的字元,那說明你的vim配置成vi相容模式了。在|not-compatible| 可以找到這一問題的對策。這個例子假設你的vim
使用的是vim的方法。如果你更喜歡老的vi編輯器的做法,你就要留心兩者在這方面的細微差别。
p.重做:如果你撤消了多次,你還可以用ctrl-r (重做)來反轉撤消的動作。換句話說,它是對撤消的撤消。
撤消指令還有另外一種形式,“u”指令,它一次撤消對一行的全部操作。第二次使用該指令則會撤消前一個“u”的操作。
“u”指令本身也造成了一次改變,這種改變同樣可以用“u”指令和ctrl-r來撤消和重做。看起來這很容易把人搞糊塗,不過别擔心,
用“u”和ctrl-r你可以找回任何一個操作狀态。請參閱|32.1|了解該主題的更多資訊。
q.其他編輯指令:
vim有一大堆指令來改變文本。請參考|q_in|和下面的内容,這裡僅列出一些最常用的。
----->\追加\
"i" 指令可以在目前光标之前插入文本。但如果你想在目前行的末尾添加一些内容時怎麼辦呢?你必需在光标之後插入文本。答案是用 "a" 指令來代替 "i" 。
例如要在一段話的末尾将句号去掉,改成三個感歎号。可以将光标移動到行尾的句點上,然後用“x”來删除這個點号。現在光标被置于行尾turtle的e上了。
鍵入指令:a!!!<esc> ,然後在後面追加三個歎号!
------->\另起一行\
“o”指令可以再目前行的下面另起一行,并使目前模式轉為insert模式。這樣你可以在該指令之後直接輸入内容。
“o”指令(注意是大寫的字母o)将在目前行的上面另起一行。
------->\使用指令計數\
假設你要向上移動9行。這可以用“kkkkkkkkk”或者“9k”來完成。事實上,很多指令都可以接受一個數字作為重複執行同一指令的次數。比如剛才的例子,
要在行尾追加三個感歎号,當時用的指令是“a!!!<esc>”。另一個辦法是用“3a!<esc>”指令。3說明該指令将被重複執行3次。
同樣,删除3個字元可以用“3x”。指定的數字要緊挨在它所要修飾的指令前面。
r.退出
要退出vim,用指令“zz”。該指令儲存目前檔案并退出vim.
備注:vim不會像其他的編輯器那樣,自動為被編輯的檔案生成一個備份。如果你用“zz”,vim就會送出你對該檔案所做出的修改。并且無法撤銷。
當然你也可以配置你的vim讓它也可以自動生成一個備份檔案。請參考|07.4|。
------->\放棄編輯\
有時候你會在做了一連串的修改之後突然意識到最好是放棄所有的修改重新來過。别擔心。vim中有一個指令可以丢棄所有的修改并退出 :q!
不要忘了在指令之後加回車!
對于喜歡把事情弄出個究竟的人來說,這個指令由3部分組成:冒号(:),用以進入冒号指令行模式;q指令,告訴編輯器退出;最後是強制指令執行的修飾符(.!)。
這裡強制指令執行的修飾符是必需的,因為vim對隐含地放棄所有修改感到不妥。如果你隻是用“:q”來退出,vim會顯示下面的錯誤資訊并且拒絕不負責任地退出。
指定了強制執行的修飾符等于告訴vim,”我知道也許我這樣做很蠢,但是我已經長大了我知道我在做什麼你就讓我蠢一次吧“。
如果你在放棄所有的修改後還想以該檔案的初始内容作為開始繼續編輯,還可以用 " :e! " 指令放棄所有修改并重新載入該檔案的原始内容。
s.求助篇
你想做的任何操作都可以在vim的幫助檔案裡找到答案,别怕問問題!指令 :help
會帶你到幫助檔案的起始點。如果你鍵盤上有一個 <f1> 鍵的話你也可以直接按 <f1> 。
如果你沒有指定一個具體的幫助主題, ":help" 指令會顯示上面提到的幫助檔案的起點。vim的作者聰明地(也許是懶惰地)設計了它的幫助系統:幫助視窗也是一個普通的編輯視窗。
你可以使用編輯其他檔案時一樣的指令來操作幫助檔案。比如用hljk移動光标。
退出幫助視窗也跟退出其他檔案編輯視窗一樣,使用 "zz" 即可。這隻會關閉幫助視窗,而不是 退出vim。
浏覽幫助檔案時,你會注意到有一些内容用兩個小栅欄圍了起來(比如 |help|)。這表明此處是一個超連結。如果你把光标置于兩個小栅欄之間的任何位置然後按下 ctrl-] (跳轉到一個标簽的指令),
幫助系統就會帶你到那個指定的主題。(因為一些此處不便讨論的原因,在vim的術語中這種超連結叫标簽。是以 ctrl-] 可以跳轉到目前光标之下的那個word 所對應的連結中。)
幾次跳轉之後,你可能想回到原來的某個地方,ctrl-t (彈出标簽) 可以回到前一個位置。用指令 ctrl-o (跳轉到較早的位置)也可以。
幫助視窗的開始有一個關于 *help.txt* 的說明。在星号 "*" 之間的字元被幫助系統定義為一個标簽的目的地(超連結的目的地)
參考 |29.1| 可以了解更多關于标簽使用的細節。
要檢視關于某個特殊主題的幫助,使用下面的指令形式:":help {subject}"
比如要得到關于 "x" 指令的幫助,就可以使用:":help x "
要查找關于如何删除的内容,使用指令: ":help deleting"
要得到所有vim指令的索引,使用指令:":help index"
如果你要得到關于某個控制字元的幫助(比如,ctrl-a),你需要用字首 "ctrl-" 來代表控制鍵:":help ctrl-a"
vim編輯器有很多模式。預設情況下幫助系統顯示的是normal模式下某個指令的幫助。比如,下面的指令顯示normal模式下ctrl-h指令的幫助:":help ctrl-h"
要查找其他模式下的幫助,使用一個模式字首。如果你想要看的是insert模式下某個指令的幫助,使用 " i_ " 字首。對于 ctrl-h 來說是這樣: ":help i_ctrl-h"
啟動vim編輯器時,你可以使用一些指令行參數。這些參數都以 - 開始。比如說要查找 -t 參數的功能,使用指令:":help -t"
vim編輯器也有衆多的選項來讓使用者自己進行定制。如果你想得到關于某個選項的幫助,你需要把它用單引号括起來。比如要找 'number' 選項,就可以用指令:":help 'number'"
關于各種模式都要用哪些字首可以在 |help-context| 中找到。
特殊鍵用尖括号中一個簡單的描述性名字表示。比如要查找insert模式下的上箭頭鍵的功能,可以用:":help i_<up>"
如果你看到了像下面這樣的錯誤資訊還是不明究竟:e37: no write since last change (use ! to override) 。你可以把它的錯誤id号作為一個幫助主題來得到更進一步的資訊:":help e37"
--------->\關于幫助的小結\
:help ,通過幫主入口。在該幫助頁中向下滾動可以檢視所有的幫助檔案,包括本地安裝的幫助檔案(比如不是随vim安裝包發行的). :help usr_toc.txt 使用者手冊的目錄,:help :subject 冒号指令
行指令 "subject" ,比如下面的:
":help :help",就是關于如何通過冒号指令行獲得幫助的指令。
":help abc"關于normal模式指令"abc"的幫助。
":help ctrl-b" 關于normal模式控制鍵<c-b>的幫助。
":help i_abc"和 ":help i_ctrl-b" 關于同樣的按鍵在插入模式的幫助。
":help v_abc"和":help v_ctrl-b" 關于同樣的按鍵在visual模式的幫助。
":help c_abc"和 ":help c_ctrl-b"關于同樣的按鍵在冒号指令行模式的幫助。
":help 'subject'" 關于選項 'subject' 的幫助。
":help subject()" 關于函數 "subject" 的幫助。
":help -subject" 關于指令行選項 "-subject" 。注意這裡“指令行”一詞指從指令解釋器shell啟動vim時所帶參數,不是指進入vim後的冒号指令行。
":help +subject" 關于編譯時特性 "+subject"的幫助。
":help eventname" 關于引發自動指令的事件 "eventname" 的幫助。
":help digraphs.txt" 到幫助檔案"digraphs.txt"的開頭。這對其它幫助檔案同樣适用。
":help pattern<tab>" 查找一個以 "pattern" 開始的幫助标記。重複按<tab>檢視其它比對的幫助标記。
":help pattern<ctrl-d>" 同時列出比對 "pattern" 的所有可能的幫助主題。
":helpgrep pattern" 在所有幫助檔案中搜尋全部檔案查找指定的 "pattern" 。并且定位到第一個比對的位置。
用下面的指令可以跳轉到其他的比對項:
":cn" ,下一個比對項。
":cprev",
":cn", 前一個比對項。
":cfirst",
":clast",第一個/最後一個比對項。
":copen",
":cclose",打開/關閉快速修改視窗;在該視窗中按<enter>可以跳到目前光标所意指的條目。
t.移動:
在你插入或删除文本之前,光标當然要先移動到正确的位置上,vim有衆多的指令來移動光标。本章将介紹這些指令中最重要的一些。此外,你可以在 |q_lr| 找到這些指令的完整清單。
------->\以word為機關的移動\
使用 "w" 指令可以将光标向前移動一個word。像大多數其它的vim指令一樣,你可以在 "w" 前面指定一個數字字首以向前移動指定個數的word。比如 "3w"将光标向前移動3個words。
注意,如果目前光标已經在一個word的首字元上時 "w" 指令還是會将光标移動到下一個 word 的首字元上。"b" 指令則将光标向後移動到前一個word的首字元上。同樣,"e"指令會将光标
移動到下一個word的最後一個字元。像 "w" 有一個反方向的指令 "b" 與之對應一樣,"e"指令有"ge",它将光标移動到前一個word的最後一個字元上。如果光标已經位于目前行的最後一個word,
則"w"會移動到下一行的第一個word上去。是以使用"w"就可以在整個文本段中移動,速度要比"1"快多了。"b"也一樣,隻是方向相反。
助記: b--->backward,e--->end of word 。
有一些被認為是non-word的特殊字元,比如 ".","-" 或 ")" 充當了word邊界的作用。要改變vim對word 邊界的定義,請檢視 'iskeyword' 選項。還可以以空白為分界的words為機關進行移動。
這種word與通常意義上的word的邊界不同。是以此處用了大寫的word來區分于word。它的移動指令也是相應字母的大寫形式,如下所示:
混合使用這種不同大小寫的指令,你可以更快地在文本中前後移動。
-------->\移動到行首或行尾\
"$" 指令将光标移動到目前行行尾。如果你的鍵盤上有一個<end>鍵,它的作用也一樣。
"^"指令将光标移動到目前行的第一個非空白字元上. "0" (注意,是數字零) 指令則總是把光标移動到目前行的第一個字元上。<home>鍵也是如此。圖示如下:
("....." 在這裡代表空白)
"$"指令還可接受一個計數,就像其它的移動指令一樣。但是移動到一行的行尾多于一次沒有任何意義。是以它的功能被賦予為移動到下一行的行尾。如“1$”會将光标移動到
目前行行尾,“2$”則會移動到下一行的行尾,如此類推。
"0" 指令卻不能接受類似這樣的計數,因為 "0" 本身就是一個數字,是以合起來 "0" 會成為你前面指定的計數的一部分,另外,并不像其它指令一樣可以舉一反三,指令 "^" 前
加上一個計數并沒有任何效果。
-------->\移動到指定的字元上\
一個最有用的移動指令是單字元搜尋指令。指令 "fx" 在目前行上查找下一個字元 x 。提示:"f" 意為 "find"。
例如,光标位于下行的開頭,假如你要移動到單詞 human 中的字元 h 上去。隻要執行指令 "fh" 就可以了。
上圖同時展示了指令 "fy" 會将光标定位于單詞 really 的尾部。
該指令可以帶一個指令計數;指令 "3fl" 會把光标定位于 "foul"的 "l" 上:
"f" 指令向左方向搜尋:
"tx" 指令形同 "fx" 指令,隻不過它不是把光标停留在被搜尋字元上,而是在它之前的一個字元上。提示:"t" 意為 "to"。該指令的反方向版是 "tx":
(這個指令好像不是很聽話!)
這4個指令都可以用 " ; " 來重複。以 " , " 也是重複同樣的指令,但是方向與原指令的方向相反。無論如何,這4個指令都不會使光标跑到其它行上去。即使目前的句子還沒有結束!
…………
這兒隻是鳳毛麟角啦~
vim會讓你覺得這個世界很神奇~~just do it!!!!