Linux指令行下的vim文本編輯器
下面這個網站的位址講解的非成厘清楚!!!!
http://blog.csdn.net/niushuai666/article/details/7275406
學習 vim 并且其會成為你最後一個使用的文本編輯器。沒有比這個更好的文本編輯器了,非常地難學,但是卻不可思議地好用。
我建議下面這四個步驟:
- 存活
- 感覺良好
- 覺得更好,更強,更快
- 使用VIM的超能力
當你走完這篇文章,你會成為一個vim的 superstar。
在開始學習以前,我需要給你一些警告:
- 學習vim在開始時是痛苦的。
- 需要時間
- 需要不斷地練習,就像你學習一個樂器一樣。
- 不要期望你能在3天内把vim練得比别的編輯器更有效率。
- 事實上,你需要2周時間的苦練,而不是3天。
第一級 – 存活
- 安裝 vim
- 啟動 vim
- 什麼也别幹!請先閱讀
當你安裝好一個編輯器後,你一定會想在其中輸入點什麼東西,然後看看這個編輯器是什麼樣子。但vim不是這樣的,請按照下面的指令操作:
- 啟 動Vim後,vim在 Normal 模式下。
- 讓我們進入 Insert 模式,請按下鍵 i 。(陳皓注:你會看到vim左下角有一個–insert–字樣,表示,你可以以插入的方式輸入了)
- 此時,你可以輸入文本了,就像你用“記事本”一樣。
- 如果你想傳回 Normal 模式,請按
鍵。ESC
現在,你知道如何在 Insert 和 Normal 模式下切換了。下面是一些指令,可以讓你在 Normal 模式下幸存下來:
推薦:
→ Insert 模式,按
i
回到 Normal 模式.
ESC
→ 删目前光标所在的一個字元。
x
→ 存盤 + 退出 (
:wq
存盤,
:w
退出) (陳皓注::w 後可以跟檔案名)
:q
→ 删除目前行,并把删除的行存到剪貼闆裡
dd
→ 粘貼剪貼闆
p
(強例推薦使用其移動光标,但不必需) →你也可以使用光标鍵 (←↓↑→). 注:
hjkl
就像下箭頭。
j
→ 顯示相關指令的幫助。你也可以就輸入
:help <command>
而不跟指令。(陳皓注:退出幫助需要輸入:q)
:help
你能在vim幸存下來隻需要上述的那5個指令,你就可以編輯文本了,你一定要把這些指令練成一種下意識的狀态。于是你就可以開始進階到第二級了。
當是,在你進入第二級時,需要再說一下 Normal 模式。在一般的編輯器下,當你需要copy一段文字的時候,你需要使用
Ctrl
鍵,比如:
Ctrl-C
。也就是說,Ctrl鍵就好像功能鍵一樣,當你按下了功能鍵Ctrl後,C就不在是C了,而且就是一個指令或是一個快鍵鍵了,在VIM的Normal模式下,所有的鍵就是功能鍵了。這個你需要知道。
标記:
- 下面的文字中,如果是
我會寫成Ctrl-λ
.<C-λ>
- 以
開始的指令你需要輸入:
回車,例如 — 如果我寫成<enter>
也就是說你要輸入:q
.:q<enter>
第二級 – 感覺良好
上面的那些指令隻能讓你存活下來,現在是時候學習一些更多的指令了,下面是我的建議:(陳皓注:所有的指令都需要在Normal模式下使用,如果你不知道現在在什麼樣的模式,你就狂按幾次ESC鍵)
- 各種插入模式
-
→ 在光标後插入a
-
→ 在目前行後插入一個新行o
-
→ 在目前行前插入一個新行O
-
→ 替換從光标所在位置後到一個單詞結尾的字元cw
-
- 簡單的移動光标
- → 數字零,到行頭
-
→ 到本行第一個不是blank字元的位置(所謂blank字元就是空格,tab,換行,回車等)^
-
→ 到本行行尾$
-
→ 到本行最後一個不是blank字元的位置。g_
-
→ 搜尋/pattern
的字元串(陳皓注:如果搜尋出多個比對,可按n鍵到下一個)pattern
- 拷貝/粘貼 (陳皓注:p/P都可以,p是表示在目前位置之後,P表示在目前位置之前)
-
→ 粘貼P
-
→ 拷貝目前行當行于yy
ddP
-
- Undo/Redo
-
→ undou
-
→ redo<C-r>
-
- 打開/儲存/退出/改變檔案(Buffer)
-
→ 打開一個檔案:e <path/to/file>
-
→ 存盤:w
-
→ 另存為:saveas <path/to/file>
<path/to/file>
-
,:x
或ZZ
→ 儲存并退出 (:wq
表示僅在需要時儲存,ZZ不需要輸入冒号并回車):x
-
→ 退出不儲存:q!
強行退出所有的正在編輯的檔案,就算别的檔案有更改。:qa!
-
和:bn
→ 你可以同時打開很多檔案,使用這兩個指令來切換下一個或上一個檔案。(陳皓注:我喜歡使用:n到下一個檔案):bp
-
花點時間熟悉一下上面的指令,一旦你掌握他們了,你就幾乎可以幹其它編輯器都能幹的事了。但是到現在為止,你還是覺得使用vim還是有點笨拙,不過沒關系,你可以進階到第三級了。
vim文本編輯器是一個非常強大的工具,可以做很多事情,比如建立檔案,打開檔案,編輯檔案,儲存檔案,同時打開多個檔案等。下面總結一些常用的vim 編輯器指令:
1. 進入vim編輯器的方式:(進入vim編輯器時,預設的模式是“指令模式”) 在終端輸入
vi:進入vim編輯器
vi filename:進入vim編輯器,建立了一個filename檔案,光标定位到檔案的第一行
vi在工作時,會在目前目錄下建立.swp的臨時檔案,該臨時檔案也稱為交換檔案
當vi結束對目前檔案編輯且正常退出時,臨時檔案.swp會被自動删除
當vi結束對目前檔案編輯且非正常退出時,臨時檔案.swp會被殘留下來
vi + filename:進入vim編輯器,打開已存在的filename檔案,光标定位到檔案的最後一行
vi在工作時,會在與被編輯檔案相同的目錄内建立一個名為.filename.swp的臨時檔案
當vi結束對目前檔案編輯且正常退出時,臨時檔案.filename.swp會被自動删除
當vi結束對目前檔案編輯且非正常退出時,臨時檔案.filename.swp會被殘留下來
vi +# filename:進入vim編輯器,打開已存在的filename檔案,光标定位到檔案的第#行(#必須用數字代替)
vi -R filename:進入vim編輯器,以隻讀方式打開已存在的filename檔案,被編輯的檔案不能回存,但可以另存為
vi -r filename:從vi crash或非正常退出中恢複檔案
vi -r .*.swp:從交換檔案.*.swp中恢複檔案
vi -r:列出目前目錄内所有因vi非正常退出而殘留的交換檔案,以便恢複
vi -L:列出目前目錄内所有因vi非正常退出而殘留的交換檔案,以便恢複
2. vi有三種工作方式: 指令模式、 編輯模式及 指令項模式。
指令模式:在這種模式下,可以通過輸入vi的指令對檔案的内容進行處理(複制、删除、移動等),也可以通過按光标鍵來移動光标。
編輯模式:在這種模式下,可以在光标處輸入内容。
指令項模式:在指令模式下,使用者輸入冒号後,光标會跳到底行,然後輸入指令。
指令模式 --> 輸入a、A、i、I、o、O等指令 --> 編輯模式
編輯模式 --> 按ESC鍵 --> 指令模式
指令模式 --> 輸入冒号 --> 指令項模式
3. 退出vi的指令
在指令模式下,輸入:
:w 儲存檔案,不退出vi
:w filename 把vi中的内容儲存到不存在的filename檔案,不退出vi
:w! filename 把vi中的内容儲存到已存在的filename檔案,不退出vi
:w>>filename 把vi中的内容追加到filename檔案,不退出vi
:n1,n2w filename 把n1行到n2行的内容儲存到不存在的filename檔案
:n1,n2w! filename 把n1行到n2行的内容儲存到已存在的filename檔案
:wq 儲存檔案,退出vi
:x 儲存檔案,退出vi
:ZZ 儲存檔案,退出vi
:q 不儲存檔案,退出vi(若檔案已改變,則不能退出)
:q! 不儲存檔案,退出vi
:ZQ 不儲存檔案,退出vi
4. 在指令模式下,可以輸入以下指令:
(1)光标移動指令
h: 左
l: 右
k: 上
j: 下
向左光标鍵
向右光标鍵
向上光标鍵
向下光标鍵
(2)插入指令
i:在光标處插入内容
I:在第一行插入内容
a:在光标後插入内容
A:在目前行的尾部插入内容
o:在目前行的下面插入新行
O:在目前行的上面插入新行
(3)删除指令
x:删除光标處的字元
X:删除光标前的一個字元
d0:删除從目前光标所在行的第一個字元到目前光标的前一個字元的一串字元
D:删除從目前光标所在的字元到目前光标所在行的最後一個字元的一串字元
dd:删除光标所在行的所有字元
dw:删除從光标處字元開始的一個單詞
例如:a boy girl pig
如果光标在l處,dw後,結果是:a boy girpig
如果光标在l和p之間的空格處,dw後,結果是:a boy girlpig
如果光标在b處,dw後,結果是:a girl pig
#dd:删除從光标所在的行到其後的#-1行(#必須用數字代替)
#x:删除從光标所在的字元開始的#個字元(#必須用數字代替)
:n1,n2 d:删除n1行到n2行的内容
(4)複制指令
:n1,n2 t n3:把n1行到n2行的内容複制到第n3行的下一行
(5)移動指令
:n1,n2 m n3:把n1行到n2行的内容移動到第n3行的下一行
(6)修改/替換指令
r:輸入一個字元替換光标處的一個字元
R:從光标處的字元開始替換,後面的字元一個一個被輸入的字元覆寫
s:輸入一串字元來替換光标處的字元
S:先清除光标所在的行,你可以在目前行輸入一串字元
cc:先清除光标所在的行,你可以在目前行輸入一串字元
cw:修改一個單詞
例如:ab cdef ghijk
光标在d處,輸入cw後,結果是:ab cde$ ghijk,
此時若輸入pqghd後,結果是:ab cpqghd ghijk
此時若輸入p後按ESC鍵,結果是:ab cp ghijk
C:修改從光标處開始及其該行後面的部分
例如:ab cdef ghijk
光标在d處,輸入cw後,結果是:ab cdef ghij$,此時輸入pqghd後,結果是:ab cpqghd
(7)光标定位指令
0:定位到光标所在行的行首
$:定位到光标所在行的行末
:#:定位到第#行的行首
:$:定位到最後一行的行首
/exp:向後定位到字元串exp
?exp:向前定位到字元串exp
/^exp:定位到行首為字元串exp的行
/exp$:定位到行末為字元串exp的行
n,m ?/exp:從n行到m行向前搜尋字元串exp (此指令有待商榷)
n,m |/exp:從n行到m行向前搜尋字元串exp (此指令有待商榷)
(8)搜尋替換指令
:s/exp1/exp2/g:将目前行的字元串exp1替換成字元串exp2
:n,m s/exp1/exp2/g:将n行到m行的字元串exp1替換成字元串exp2
:g/exp1/exp2/g:将目前行的字元串exp1替換成字元串exp2
:g/exp1/s//exp2/g:将全文中的字元串exp1替換成字元串exp2
(9)撤銷指令
u
(10)緩沖區指令
預設情況下,vi使用無名緩沖區,例如:雖然将檔案的某些部分删除了,但仍可以用u命名進行撤銷。
yy:将光标所在的行放入無名緩沖區
Y:将光标所在的行放入無名緩沖區
p:将緩沖區中的内容粘貼到光标所在的行的下一行
P:将緩沖區中的内容粘貼到光标所在的行的上一行
"#yy:将光标所在的行放入緩沖區# (#必須用a~z代替)
"#p:将緩沖區#中的内容粘貼到光标所在的行的下一行 (#必須用a~z代替)
"#P:将緩沖區#中的内容粘貼到光标所在的行的上一行 (#必須用a~z代替)
"#d:删除目前行,将目前行的内容放入緩沖區#
(11)其它指令
:set nu:顯示行号
:set nonu:取消行号
:n 定位到下一個檔案
:N 定位到上一個檔案
vi 1.c 2.c 3.c:一次打開3個檔案
首先會打開1.c,輸入:n指令後,會打開2.c,再輸入:n指令後,會打開3.c,
再輸入:N指令後,會打開2.c,再輸入:N指令後,會打開1.c。
Ctrl+G:顯示目前編輯檔案的資訊
Ctrl+L:重新整理螢幕
Ctrl+d:向後翻半屏
Ctrl+u:向前翻半屏
Ctrl+f:向後翻一屏
Ctrl+b:向前翻一屏