Vim 入門文檔

  1. 光標在屏幕文本中的移動既可以用箭頭鍵,也可以使用 hjkl 字母鍵。
     h (左移)    j (下行)       k (上行)        l (右移)
  2. 欲進入vim編輯器(從命令行提示符),請輸入︰vim 文件名 <回車>
  3. 欲退出vim編輯器,請輸入以下命令放棄所有修改︰
    <ESC>   :q!     <回車>
     或者輸入以下命令保存所有修改︰
    <ESC>   :wq     <回車>
  4. 在正常模式下刪除光標所在位置的字符,請按︰ x
  5. 在正常模式下要在光標所在位置開始插入文本,請按︰i   輸入必要文本    <ESC>
特別提示︰按下 <ESC> 鍵會帶您回到正常模式或者取消一個不期望或者部分完成
的命令。
*********************************************************************
  1. 欲從當前光標刪除至單字/單詞末尾,請輸入︰dw
  2. 欲從當前光標刪除至當前行末尾,請輸入︰d$
  3. 欲刪除整行,請輸入︰dd
  4. 在正常模式下一個命令的格式是︰
       [number]   command   object     或者     command    [number]   object
     其意是︰
       number - 代表的是命令執行的次數
       command - 代表要做的事情,比如 d 代表刪除
       object - 代表要操作的對象,比如 w 代表單字/單詞,$ 代表到行末等等。
        $ (to the end of line), etc.
  5. 欲撤消以前的操作,請輸入︰u (小寫的u)
     欲撤消在一行中所做的改動,請輸入︰U (大寫的U)
     欲撤消以前的撤消命令,恢復以前的操作結果,請輸入︰CTRL-R
*********************************************************************
  1. 要重新置入已經刪除的文本內容,請輸入小寫字母 p。該操作可以將已刪除
     的文本內容置於光標之後。如果最後一次刪除的是一個整行,那麼該行將置
     於當前光標所在行的下一行。
  2. 要替換光標所在位置的字符,請輸入小寫的 r 和要替換掉原位置字符的新字
     符即可。
  3. 更改類命令允許您改變指定的對象,從當前光標所在位置直到對象的末尾。
     比如輸入 cw 可以替換當前光標到單詞的末尾的內容;輸入 c$ 可以替換當
     前光標到行末的內容。
  4. 更改類命令的格式是︰
     [number]   c    object          或者    c   [number]   object
*********************************************************************
  1. Ctrl-g 用於顯示當前光標所在位置和文件狀態信息。Shift-G 用於將光標跳
     轉至文件最後一行。先敲入一個行號然後按 Shift-G 則是將光標移動至該行
     號代表的行。
  2. 輸入 / 然後緊隨一個字符串是則是在當前所編輯的文檔中向後查找該字符串。
     輸入問號 ? 然後緊隨一個字符串是則是在當前所編輯的文檔中向前查找該字
     符串。完成一次查找之後按 n 鍵則是重復上一次的命令,可在同一方向上查
     找下一個字符串所在;或者按 Shift-N 向相反方向查找下該字符串所在。
  3. 如果光標當前位置是括號(、)、[、]、{、},按 % 可以將光標移動到配對的
     括號上。
  4. 在一行內替換頭一個字符串 old 為新的字符串 new,請輸入  :s/old/new
     在一行內替換所有的字符串 old 為新的字符串 new,請輸入  :s/old/new/g
     在兩行內替換所有的字符串 old 為新的字符串 new,請輸入  :#,#s/old/new/g
     在文件內替換所有的字符串 old 為新的字符串 new,請輸入  :%s/old/new/g
     進行全文替換時詢問用戶確認每個替換需添加 c 選項,請輸入 :%s/old/new/gc
*********************************************************************
  1. :!command 用於執行一個外部命令 command。
     請看一些實際例子︰
     :!dir        -  用於顯示當前目錄的內容。
     :!rm FILENAME    -  用於刪除名為 FILENAME 的文件。
  2. :w FILENAME  可將當前 VIM 中正在編輯的文件保存到名為 FILENAME
     的文件中。
  3. :#,#w FILENAME 可將當前編輯文件第 # 行至第 # 行的內容保存到文件
     FILENAME 中。
  4. :r FILENAME 可提取磁盤文件 FILENAME 並將其插入到當前文件的光標位置
     後面。
**********************************************************************
  1. 輸入小寫的 o 可以在光標下方打開新的一行並將光標置於新開的行首,進入
     插入模式。
     輸入大寫的 O 可以在光標上方打開新的一行並將光標置於新開的行首,進入
     插入模式。
  2. 輸入小寫的 a 可以在光標所在位置之後插入文本。
     輸入大寫的 A 可以在光標所在行的行末之後插入文本。
  3. 輸入大寫的 R 將進入替換模式,直至按 <ESC> 鍵退出替換模式而進入正常
     模式。
  4. 輸入 :set xxx 可以設置 xxx 選項。
**********************************************************************
  Vim 擁有一個細致全面的在線幫助系統。要啟動該幫助系統,請選擇如下三種方
  法之一︰
    - 按下 <HELP> 鍵 (如果鍵盤上有的話)
    - 按下 <F1> 鍵 (如果鍵盤上有的話)
    - 輸入    :help <回車>
  輸入 :q <回車> 可以關閉幫助窗口。
  提供一個正確的參數給":help"命令,您可以找到關於該主題的幫助。請試驗以
  下參數(可別忘了按回車鍵哦。:)︰

      :help w <回車>
      :help c_<T <回車>
      :help insert-index <回車>
      :help user-manual <回車>
      
      
      
      
      
      
      
      
      
      
      
      
      
      vim常用快捷操作
1,*:該命令可以查找光標所在位置的單詞;

2,%: 命令可以從一個打開的括號跳轉到與它成對匹配的另一個括號處,還可以從一個預處理指令"#if"跳轉到與之匹對的"#endif"

3,[{:使光標從區間中的任意位置移到區間的頭部。如在{}區間中執行命令“[{“可使光標移到“{”處。

4,gd:在某個被使用的變量處輸入“gd”命令可使光標移到該變量的聲明處。

5,局部替換:用*命令找到想要替換的單詞,cw命令替換這個單詞。用n找到下一個單詞並用.就可以替重複上面的替換動作了。不光對替換,這些命令對刪除、插入也適用。

6,如果我們反覆用到了glTranslatef()這個函數,當第二次輸入glT時再敲Ctrl-N就可以自動補全到glTranslatef了,如果出來的是glLoadIdentity,而不是我們想要的glTranslatef,這時再敲命令Ctrl-N,直到補全的是我們想要的 glTranslatef。

7,宏:vim可以自行記錄一個宏。你鍵入"qa"開始把一段宏記錄入寄存器變量‘a’中。接下來像平常一樣鍵入要的操作, 只是這些操作都會被Vim記錄進它命名爲‘a’的宏中, 再次再下"q"鍵, 就結束了‘a’的錄製。當你要重複執行你剛纔記錄的那些操作時只要使用"@a"命令。共有26個可用的寄存器供你記錄宏。不只是插入,其他的操作也可以使用宏。

8,如果我們在輸入include時總是將它輸成inclued,可用下面的方法解決。
       :abbr inclued include 以後凡是輸入inclued的時候系統會自動將其改爲include.
      如果我們反覆用到一些字符,可將它編爲縮寫。
      :abbr inc #include() 以後凡是輸入inc時系統會自動輸入#include“”
    :abbr MS Mandrake Software 用MS代替後面的Mandrake Software

9,標籤:
    介紹本節內容之前我們先介紹一下什麼是標籤(tags)。tag是一個位置,記錄了關於一個標識符在哪裏被定義的信息。如C程序中一個函數的定義。這種 tag聚集在一起被放入一個tags文件。這個文件可以讓vim從任何位置跳到tag所指定的位置(標識符定義的位置)。
    下面的命令可以爲當前目錄下的所有C程序文件生成對應的tags文件:
    ctags *.c
     現在用如下的命令就可以在vim中跳到一個函數的定義處:
    :tag realize 或 Ctrl-]
    這樣光標就跳到了函數realize的定義處,哪怕它是在另一個文件中。
    現在用下面的命令就可以跳回到上一個標籤處:
    Ctrl-T
10,頭文件
    [I:在頭文件處使用“[I“命令可以定位頭文件的位置,如在“#include<stdio.h>處使用“[I”命令可以顯示該頭文件的位置。
    :checkpath:顯示所有用到的頭文件及他們的路徑。
11,簡易快捷操作:

    * G:將光標移動到文件尾部
    * gg:移動到文件首部
    * M:移動到屏幕中間
    * L:移動到屏幕底部
    * H:移動到屏幕首部
    * *:讀取光標處的字符串,並移動到它再次出現的位置
    * #:與上面的相反,移動到它上次出現的位置
    * ma:在當前位置標記一個書籤,書籤只能是小寫字母。你看不見它的存在,但它已經存在到那裏了。
    * `a:移動到標籤 a 處。
    * `.:移動到上一次編輯文件的地方。這個功能很有用,而且不需要標記它。

12,高效的輸入:

    * a:在當前字符的右邊輸入
    * i:在當前字符的左邊輸入
    * o:在當前行的下一行輸入
    * O:在當前行的上一行輸入
    * 10dd :將會刪除下面的十行。

13,用 VIM 寫代碼:

    * >:縮進所選擇的內容
    * <:和上面的命令一樣,只是反縮進
    
   
    
    VIM下的跳轉練習
    
    hjkl 這是代替箭頭鍵功能的
H M L 跳到屏幕的頂上 中間 下方

w 跳到下一個單詞的開始
e 跳到單詞的結束
b 向後跳

gg 跳到文件的開始
G 跳到文件的結束
10gg 或10G 跳到第10行


ta 跳到下一個a 前面
fa 跳到下一個a
大寫的意思相反



另外還有%(跳到文件的%多少) 和|(跳到第幾列) 不過我很少用


上面的都可以加上數字前綴 表示第幾個匹配


另外看文件時 除了pageup pagedown外還有其它的快速鍵
如CTRL-F 向前一頁 CTRL-B 向後一頁

上面不是重要的
CTRL-D 向下半頁 CTRL-U 向上半頁我覺得更實用 這樣看文章時就不會跳轉出錯
另外還有
CTRL-E 向下一行
CTRL-Y 向上一行


^ 行首
$行尾
0 第一個字符


另外上面也作爲vim其它命令的定位符 如刪除d

dt)
一直刪除到這行的)

另外 懂了跳轉鍵後 那刪除或是複製時就不再是以行爲單位了 可以指定到某個條件
我覺得這是新手成長的必要方法


另外還有ctrl-t ctrl-i ctrl-]

如果已經使用了ctags 或是cscope創建索引文件的話 那看代碼時很是方便

跳轉到函數、變量定義處:
[+ctrl+i 跳轉到函數、變量和#define
[+ctrl+d 跳轉到#define處
ctrl+i 向前跳到前幾次光標位置
ctrl+o 向後跳到後幾次光標位置

函數體跳轉:
[[
]]
[]
][
{}

2009-07-07 17:31 補充

如何選中括號中的內容 進行:
將光標移至括號內,按shift+v進入行選模式,然後

i{ - 選小括號中內容,不包括小括號
a{ - 選小括號中內容,包括小括號
ib - 選中括號中內容,不包括括號
ab - 選中括號中內容,包括括號
i{ - 選大括號中內容,不包括大括號
a{ - 選大括號中內容,包括大括號

:h text-objects

下面還有些相關的tips,未全部驗證:
vi{ 選中{}中間的內容,不包括{}
va{ 選中{}中間內容,包括{}
vi( 選中()中間內容
vi< 選中<>中間內容
vi[ 選中[]中間內容
vit 選中中間的內容
vi” 選中”"中間內容
vi’ 選中”中間的內容
vis 選中一個句子
vib 選中一個block
viw選中一個單詞
vip 選中一個段落

在normal模式下光標停在某個字符上ga可以查看該字符的ascii碼
#複製刪除粘貼的操作:按V(shift+v),進入可視模式,jk上下選擇需要的行,然後按
y 複製
d 刪除
x 剪切
p 粘貼
可視模式很好用,例如想把兩行的所有單詞變成小寫,按V然後按j或k選中這兩行,按gu即可
#跳到行首按0,但實際更好用的是^, 跳到行首非空白字符
#折行前空出4字符顯示折行標識
set foldcolumn=4
#摺疊或展開(在摺疊的那一行左右移動光標也可展開摺疊)
za
#刪除光標所在行所處的範圍的摺疊
zd
#當在:set foldmethod=marker後,折行會把{{{和}}}之間的內容摺疊
#不在單詞中間斷行。 設置了這個選項後, 如果一行文字非常長, 無法在一行內顯示完的話,
它會在單詞與單詞間的空白處斷開, 儘量不會把一個單詞分成兩截放在兩個不同的行裏。
set lbr
#sw是shiftwidth的縮寫,表縮進列數
fx把光標移動到該行的下個x字符上,這個x也可以是一個漢字,;重複fx操作。Fx把光標移動到該行的上一個x字符上。
gg光標定位到第一行開頭,G定位到最後一行開頭
H光標跳到當前窗口顯示文本的第一行
M光標跳到當前窗口顯示文本的中間一行
L光標跳到當前窗口顯示文本的最後一行
g*查找包含當前單詞的所有單詞(*只查找與當前單詞精確匹配的單詞),
-d光標下跳半屏,文本上滾半屏
-u光標上跳半屏,文本下滾半屏
-e文本向上滾動一行
zz屏幕滾動使得當前行成爲屏幕的中間一行
normal模式下按J刪除此行末尾的換行符,從而合併兩行
:e!重新讀進上次保存的此文件內容
:ab myname william_djj
以後再編輯時鍵入myname,然後空格或回車myname串就會被william_djj代替
:r !date
在當前位置插入系統時間(linux下的date命令),同理當前位置插入某文件的內容就是
:r filename
:set ignorecase
查找時取消case sensitive
:set noignorecase
查找時case sensitive






############ 使用tags ###################
以下命令遞歸當前目錄下的所有文件創建tags文件
ctags -R .
vim打開當前目錄下的任意一文件,命令模式下鍵入下面語句以指定剛纔創建的tags的位置,以後就可以在不同文件間查閱函數
set tags=../tags
#分割窗口顯示當前函數的定義
-w ]
##########################################
如果插件目錄下有echofunc.vim,用以下命令生成tags,以後編輯代碼函數名後打“(“時有參數提示。
$ ctags -R –fields=+lS .
:Tlist打開左邊一個taglist的窗口,顯示symbols。要注意的是在windows下如果tags文件路徑中有空格或中文會報找不到tags文件的錯誤,
+w+w 或者+w+left/right 窗口切換
+] 進入光標所指的symbol的定義(如果用鼠標也是+鼠標左鍵,跟SI的用法一樣)
+t 返回第一個用+t 跳轉位置,注意+o是跳回上一個視圖,而+t是跳回上一次按+]的位置
#以下命令分裂出一個窗口顯示定義處
ptag 函數名
#以下命令關閉剛纔打開的分裂窗口
pclose

#垂直分裂窗口打開一文件
vsplit 文件名

#水平分裂窗口打開一文件
split 文件名
變量名寫成/name表示匹配模式
停在某個括號上按%,跳到匹配的括號處,#if跳到匹配的#else或#endif處
set fdm=syntax摺疊函數體
雙擊]往後逐個函數跳讀,雙擊[往前逐個函數跳讀

#解決亂碼
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

#在vim下對比兩個文件,原來打開了fnpro.c,現在和fnpro.c.bak對比

#垂直分割
:vert diffsplit fnpro.c.bak

#水平分割
:diffsplit fnpro.c.bak

#跳到下一個不同之處
:]c

#跳到上一個不同之處
:[c

#展開摺疊:zo

#摺疊:zc

#不論何種情況下-o都可以上一次跳轉的地方

#查看變量和函數的申明
[i

#以下爲查看vim環境參數makeprg的值的例子:
:set makeprg?

#重新對文件代碼進行縮進
gg=G

跳轉到函數、變量定義處:
[+ctrl+i 跳轉到函數、變量和#define
[+ctrl+d 跳轉到#define處
ctrl+i 向前跳到前幾次光標位置
ctrl+o 向後跳到後幾次光標位置

函數體跳轉:
[[
]]
[]
][
{}

2009-07-07 17:31 補充

如何選中括號中的內容 進行:
將光標移至括號內,按shift+v進入行選模式,然後

i{ - 選小括號中內容,不包括小括號
a{ - 選小括號中內容,包括小括號
ib - 選中括號中內容,不包括括號
ab - 選中括號中內容,包括括號
i{ - 選大括號中內容,不包括大括號
a{ - 選大括號中內容,包括大括號

:h text-objects

下面還有些相關的tips,未全部驗證:
vi{ 選中{}中間的內容,不包括{}
va{ 選中{}中間內容,包括{}
vi( 選中()中間內容
vi< 選中<>中間內容
vi[ 選中[]中間內容
vit 選中中間的內容
vi” 選中”"中間內容
vi’ 選中”中間的內容
vis 選中一個句子
vib 選中一個block
viw選中一個單詞
vip 選中一個段落

vim文件跳轉

如果使用vim打開了多個文件,如vim file1 file2 ... fileN
可以通過
:n 或 :prev來跳轉到前一個或者後一個文件
還可以通過
:first或:last來跳轉到第一個和最後一個文件

如果你只打開一個文件,如vim file1
然後在使用過程中,通過
:e file2編輯了第二個文件,這時, :prev是不起作用的
可以用
:e#返回上一個編輯的文件

無論哪兩種方式都可以用
:bN跳轉到打開的第N個文件
如:b1跳轉到第一個打開的文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章