Linux基礎知識--- 5、VIM文本編輯器

一、打開文件

vim abc #打開abc文件,如果沒有abc文件,就默認創建abc文件
vim + abc #打開abc文件,定位到最後一行
vim +5 abc #打開abc文件,定位到最後5行
vim +/xxx abc #打開abc文件,定位到含有xxx的第一行,用n可以切換到下一帶xxx的行,N切換到上一個含xxx的行

二、切換到文本輸入模式的命令鍵

i 在光標左側輸入正文
I 在光標所在行的行首輸入正文
a 在光標右側輸入正文
A 在光標所在行的行尾輸入正文
o 在光標所在行的下一行增添新行,光標位於新行的行首
O 在光標所在行的上一行增添新行,光標位於新行的行首

三、編輯器的退出命令

:wq 保存文件,退出vi編輯器
:w 保存文件,但不退出vi編輯器
:q 退出vi編輯器
:q! 不保存文件,退出vi編輯器
ZZ 保存文件,退出vi編輯器

四、命令模式下vi編輯器的文本修改鍵

x 刪除光標位置指定的字符
dd 刪除光標所在的行
u 撤銷最近的修改
U 撤銷對當前行上做的所有修改
r 替換光標位置上的一個字符
R 替換從光標位置開始的字符,同時改變vi到文本輸入模式
.(點) 重複上一次的修改

五、命令模式下vi的光標移動鍵

h或[ ] 將光標向左移動一格
j或[ ] 將光標向下移動一格
k或[ ] 將光標向上移動一格
l或[ ] 將光標向右移動一格
$ 將光標移到當前行的行尾
w 將光標向右移一個字
b 將光標向左移一個字
e 將光標移到字尾
0(零) 將光標移到當前行的行首
[Return]鍵 將光標移到下一行的行首
[Spacebar]鍵 將光標向右移動一位
[Backspace]鍵 將光標向左移動一位

注意:在文本輸入模式下避免使用光標鍵(箭頭鍵)。因爲在某些系統中,光標鍵被解釋爲普通的ASCII 字符。如果在文本輸入模式下使用光標鍵,那麼對應的ASCII字符將被插入文件中。

六、vim編輯器的剪切和粘貼鍵

d 刪除指定位置的文本,並存到臨時的緩衝區中。可以使用put操作符(p或P鍵)訪問這個緩衝區
y 將指定位置的文本複製到臨時緩衝區。可以使用put操作符訪問這個緩衝區
P 將指定緩衝區的內容放到當前光標的位置之上
p 將指定緩衝區的內容放到當前光標的位置之下
翻頁鍵 翻頁鍵用來大塊滾動用戶的文件,在vi的命令模式下可用。表6列出了vi編輯器的翻頁鍵及其功能。

七、vim編輯器的翻頁鍵

[Ctrl-d] 將光標向下移到文件尾,通常每次移動12行
[Ctrl-u] 將光標向上移到文件頭,通常每次移動12行
[Ctrl-f] 將光標向下移到文件尾,通常每次移動24行
[Ctrl-b] 將光標向上移到文件頭,通常每次移動24行

三種常見的模式:Normail Mode(命令模式),Insert Mode(輸入模式)和Visual Mode(視圖模式)。
命令模式和輸入模式的切換有Append,Insert,Replace,Subsitute 記作AIRS,這種記憶方法特別方便,英文單詞的意思是空氣,vim在命令模式和輸入模式的切換就像空氣一樣,無影無形。

八、vim其他命令

打開文件、保存、關閉文件:

    vi filename       //打開filename文件
    :w              //保存文件
    :w vpser.net  //保存至vpser.net文件
    :q             //退出編輯器,如果文件已修改請使用下面的命令
    :q!           //退出編輯器,且不保存
    :wq              //退出編輯器,且保存文件

插入文本或行:

    a      //在當前光標位置的右邊添加文本
    i       //在當前光標位置的左邊添加文本
    A     //在當前行的末尾位置添加文本
    I      //在當前行的開始處添加文本(非空字符的行首)
    O     //在當前行的上面新建一行
    o     //在當前行的下面新建一行
    R    //替換(覆蓋)當前光標位置及後面的若干文本
    J    //合併光標所在行及下一行爲一行(依然在命令模式)

移動光標:

    使用上下左右方向鍵
    命令模式下:h   向左、j   向下 、k   向上、l  向右。
    空格鍵 向右、Backspace  向左、Enter  移動到下一行首、-  移動到上一行首。

刪除:

    x         //刪除當前字符
    nx        //刪除從光標開始的n個字符
    dd      //刪除當前行
    ndd   //向下刪除當前行在內的n行
    u       //撤銷上一步操作
    U      //撤銷對當前行的所有操作

搜索:

    /vpser     //向光標下搜索vpser字符串
    ?vpser    //向光標上搜索vpser字符串
    n           //向下搜索前一個搜素動作
    N           //向上搜索前一個搜索動作

跳轉:

    n+        //向下跳n行
    n-         //向上跳n行
    nG        //跳到行號爲n的行
    G           //跳至文件的底部

設置行號:

    :set  nu     //顯示行號
    :set nonu    //取消顯示行號

複製:

    yy    //將當前行復制到緩存區,也可以用 "ayy 複製,"a 爲緩衝區,a也可以替換爲a到z的任意字母,可以完成多個複製任務。
    nyy   //將當前行向下n行復制到緩衝區,也可以用 "anyy 複製,"a 爲緩衝區,a也可以替換爲a到z的任意字母,可以完成多個複製任務。
    yw    //複製從光標開始到詞尾的字符。
    nyw   //複製從光標開始的n個單詞。
    y^      //複製從光標到行首的內容。 
    y$      //複製從光標到行尾的內容。
    p        //粘貼剪切板裏的內容在光標後,如果使用了前面的自定義緩衝區,建議使用"ap 進行粘貼。
    P        //粘貼剪切板裏的內容在光標前,如果使用了前面的自定義緩衝區,建議使用"aP 進行粘貼。

替換:

    :s/old/new      //用new替換行中首次出現的old
    :s/old/new/g         //用new替換行中所有的old
    :n,m s/old/new/g     //用new替換從n到m行裏所有的old
    :%s/old/new/g      //用new替換當前文件裏所有的old

編輯其他資源:

    :e otherfilename    //編輯文件名爲otherfilename的文件。

修改文件格式:

    :set fileformat=unix   //將文件修改爲unix格式,如win下面的文本文件在linux下會出現^M。

九、其它

  1. vim的配置文件

    ~/.vimrc        用戶的默認配置文件
    ~/.vim/plugin/   用戶的默認腳本文件的存放目錄
    ~/.vim/ftplugin/ 用戶的默認文件類型相關腳本文件的存放目錄
    
  2. vim提供的編程支持
      文本信息(行號、文件名等)
      代碼縮進
      語法高亮
      快速定位
      標記位置
      全文搜索
      補全
      多文件編輯
      多窗口編輯
      函數列表
      文件列表
      函數跳轉
      語法錯誤
      字符集的編碼
      二進制查看
      等等…

  3. 快速定位

    gd(正常模式下使用命令) 跳轉到局部變量定義處。
    gD(正常模式下使用命令) 跳轉到全局標量定義處。
    *(正常模式下使用命令) 搜索並跳到下一個光標所在的單詞。
    g*(正常模式下使用命令) 功能接近*,但是查找的目標不帶\<和\>單詞分界符號。
    #(正常模式下使用命令) 搜索並跳到上一個光標所在的單詞。
    g#(正常模式下使用命令) 功能接近#,但是查找的目標不帶\<和\>單詞分界符號。
    
  4. 用/和?的區別:

    /後跟查找的字符串。vim會顯示文本中第一個出現的字符串。
    ?後跟查找的字符串。vim會顯示文本中最後一個出現的字符串。
    
    注意事項:
    不管用/還是?查找到第一個字符串後,按回車,vim會高亮所有的匹配文
    系統新氧ubuntu下默認的是incsearch模式,就是輸完命令後,會自動顯示第一個(或最後一個)匹配。
    如果輸入:set noincsearch 會轉到普通模式,不會自動顯示第一個匹配,回車後顯示所有匹配。
    高亮所有的匹配後,按n鍵轉到下一個匹配,按N鍵轉到上一個匹配。
    
  5. 標記位置

    m{a-zA-Z0-9} (正常模式下使用命令) 在當前位置製作一個標記,標記名字可以使用a-z或者A-Z之間的任意字符,例如輸入ma,就是將當前位置標記爲a標記。注意a-z爲單文件標記,不可跨文件使用,而A-Z0-9爲全局標記,可以跨文件使用。
    ‘{a-zA-Z0-9} (正常模式下使用命令) 跳轉到本文件的標記上。
    :marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定標記的內容,不寫標記號則查看所有。
    :delm {a-zA-z0-9} (正常模式下使用命令) 刪除一個標記。
    
  6. 全文搜索

    :vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim進行多文件跳轉定位。
    使用方法:vimgrep 正則表達式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望遞歸搜索,可以使用**/*,表示搜索所有的文件。
    :cl 列舉結果
    :cc(正常模式下使用命令) 當前結果
    :cn(正常模式下使用命令) 下一個結果
    :cp(正常模式下使用命令) 上一個結果
    :cw(正常模式下使用命令) 重新打開搜索結果窗口
    
  7. 多文件編輯

    vim f1 f2 …… fn(在shell下使用命令) 打開多個文件。
    :e 文件名(正常模式下使用命令) 在vim中打開新文件。
    :ls(正常模式下使用命令) 所有打開文件列表。
    :bn(正常模式下使用命令) 到下一個文件。
    :bp(正常模式下使用命令) 到上一個文件。
    :b# 或 ctrl-6(正常模式下使用命令) 到最近的前一個文件。
    set  autowriteall(寫入配置文件.vimrc中) 如果討厭每次打開新文件,vim喋喋不休的要求你保存,那麼可以設置自動保存。
    
  8. 多窗口編輯

    :sp  文件名(正常模式下使用命令) 橫向拆分窗口(多行窗口)。
    :vsp 文件名(正常模式下使用命令) 縱向拆分窗口(多列窗口)。
    ctrl-w h(正常模式下使用命令) 將光標移動到左一個窗口。
    ctrl-w j(正常模式下使用命令) 將光標移動到下一個窗口。
    ctrl-w k(正常模式下使用命令) 將光標移動到上一個窗口。
    ctrl-w l(正常模式下使用命令) 將光標移動到右一個窗口。
    ctrl-w +(正常模式下使用命令) 當前窗口尺寸變大。
    ctrl-w -(正常模式下使用命令) 當前窗口尺寸變小。
    ctrl-w o(正常模式下使用命令) 只顯示當前窗口。
    
  9. 函數列表

    taglist.vim(插件) 列表插件。
    let Tlist_Use_Right_Window = 1(寫入配置文件.vimrc中) 如果希望列表在右側顯示,則加入這個配置,默認是左側。
    :Tlist(正常模式下使用命令) 顯示函數列表。
    d(在taglist窗口下使用) 從列表中刪除文件。
    +(在taglist窗口下使用) 展開文件。
    -(在taglist窗口下使用) 摺疊文件。
    =(在taglist窗口下使用) 摺疊所有文件。
    x(在taglist窗口下使用) 顯示或隱藏正常窗口。
    
  10. 文件列表

    NERD_tree.vim(插件) 橫向拆分窗口(多行窗口)。
    let NERDTreeWinPos = 'right'(寫入配置文件.vimrc中) 如果希望文件樹在右側顯示,則加入這個配置,默認是左側。
    :NERDTree(正常模式下使用命令) 顯示文件列表。
    
  11. 函數跳轉

    ctags(軟件,需要另外安裝) 生成多種語言tag文件的軟件。
    Ctags –R *.c(在shell下使用命令) 生成當前路徑所有.c文件的tag,-R代表遞歸。
    :ta 標記 或 [g] ctrl-] 列舉標籤(多個標籤)或者跳轉到標籤(單個標籤)。
    ctrl-t 返回上一級。
    :tags 列出標籤棧。
    
  12. 語法錯誤

    :make(正常模式下使用命令) 執行外部make命令,並且顯示所有的編譯警告和錯誤,並且可以在vim中定位。
    :cl 列舉結果
    :cc(正常模式下使用命令) 當前結果
    :cn(正常模式下使用命令) 下一個結果
    :cp(正常模式下使用命令) 上一個結果
    :cw(正常模式下使用命令) 重新打開搜索結果窗口
    
  13. 補充

    ctrl-p(插入模式下使用命令) 跳出補全菜單。
    ctrl-n(在跳出補全菜單後) 下一個結果。
    ctrl-p(在跳出補全菜單後) 上一個結果。
    ctrl-y(在跳出補全菜單後) 選擇當前結果。
    ctrl-x ctrl-f(插入模式下使用命令) 文件名補全。
    ctrl-x ctrl-i(插入模式下使用命令) 包含的頭文件。
    ctrl-x ctrl-](插入模式下使用命令) ctags(將在下文中介紹)符號補全。
    ctrl-x ctrl-o(插入模式下使用命令) omni補全,需要設置omnifunc變量。
    
發佈了40 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章