編輯器之神vim交流學習

來源:互聯網
上載者:User

這幾天要跟公司的同事講一下vim的基本使用方法,在此記錄相關資料.

本次交流應該分為幾大部分

1.vim 是什麼

2.vim與emacs

3.為什麼要學習vim

4.常用的gui編輯器與vim對比 體現vim的優勢

5.vim常用命令介紹

6.配合開發相關命令介紹

7.如何學習vim

8.vim的附加值 學習linux與效率

9.提高工作效率的幾點建議

一 什麼是vim
Vim是一個類似於Vi的文字編輯器,不過在Vi的基礎上增加了很多新的特性。
vi和vim是我們在Linux中最常用的編輯器,大多數類linux系統都預設安裝。vim雖然沒有圖形介面編輯器那樣點滑鼠的簡單操作,但vim編輯器在系統管理、伺服器管理字元介面中,永遠不是圖形介面的編輯器能比的.

二 vim與emacs
據說Emacs是神的編輯器,而Vim是編輯器之神.所謂神的編輯器 emacs 那肯定不是只有編輯檔案功能那麼簡單。據說Emacs裡可以管理檔案系統,運行終端,收郵件,上網,聽音樂,甚至,有人用Emacs控制咖啡機煮咖啡。所謂編輯器之神 從字面上理解應該是編輯器中最厲害的,最強的。vim 一向是以快速的文本編輯聞名於世的,它的按鍵更簡潔,更快速的實現操作。

三 為什麼要學習vim
1.編輯程式速度快,這是最重要 vim也因此聞名於世

2.更容易的學習和使用linux系統
     每個系統管理員至少要學會使用一種命令列介面的文文書處理器來管理系統,linux下文文書處理軟體非常多,如 emacs xedit kedit ,但是vi幾乎是任何一個類unix系統中都預設安裝的,學會她,學習和使用linux會方便很多。

四 vim與常用gui編輯器對比
1.eclipse等gui工具能做到的 vim 能夠更快的做到

    多檔案新標籤開啟並進行切換

    查看檔案目錄

    文字尋找

    文字替換

    使用正則

    儲存與恢複

   工作環境儲存及恢複

2.eclipse做不到的,它能做到而且很多

     移動游標所在位置 如 行移動 單詞移動 行內移動 嵌套語句中移動

     滾屏顯示

     分割視窗多檔案同時顯示到螢幕上

     函數預覽同時編輯檔案

     代碼嵌套結構下的移動

     無需任何外掛程式自動補全

這所有的一切在linux上無需安裝任何工具就可以實現

五 開始vim常用命令介紹

vim 基本模式介紹
Vim編輯器是一個模式編輯器。這意味著在不同狀態下編輯器有不同的行為模式。vim 有三種模式 一般模式 編輯模式 命令列模式 在一般模式與命令列模式下你鍵入的每一個字元都被視為一個命令。而在Insert模式下鍵入的字元都作為實際要輸入的常值內容

一般模式
一般模式下常用命令

移動游標
    滾屏: ctrl+f  向下移動一頁 ctrl+b 反之 ctrl+d 向下移動半頁 ctrl+u 反之 ctrl+e 向上移動一行 ctrl+y向下移動一行
    當前行移動位置:zz 將游標所在行移動到中央 zt螢幕上面 zb 螢幕下面
    當前屏移動游標: H home螢幕最上面一行 M middle中間一行 L  last最下面一行
    檔案中移動:gg第一行  G最後一行 nG 第n行  
    單行中移動:shift+^行首 shift+$ 行尾
    移動到指定字元上 f'm'  m所在位置 F 向左方向 游標落在搜尋字元上 n執行幾次 t 同理 只是游標落在被搜尋  字元前面
    以單詞移動:w 向後移動一個單詞 nw向後移動n個單詞 b向前移動一個單詞 nb向前移動n個單詞 游標落在單詞首字母上
    e 向後移動一個單詞 游標落在單詞最後一個字母 ge 反之
    % 嵌套中移動包括()[]{}  
    移動到制定行 n{hjkl} 分別做相應跳轉 如 3j向下移動3行
    檔案位置百分比移動 10% 檔案內容10%比例處
    查看當前位置: ctrl+G
    跳轉: '' 來回與跳轉之間 ctrl+o 後退 ctrl+i 前進

刪除複製與粘貼
    x 向後上出一個字元 X反之 nx 向後刪除n個字元  nX反之
    dd 刪除一行 ndd向下刪除n行
    dw 刪除一個單詞
    d1G 刪除游標所在位置到第一行的所有資料 dG 刪除游標所在位置到最後一行的所有資料
    d$刪除游標所在位置到行尾 d0 or d^ 刪除游標所在位置到行首
    yy 複製游標所在那一行 ayy 複製游標所在的向下n行
    y1G 複製游標所在行到第一行的所有資料 yG複製游標所在行到最後一行的所有資料
    y0 複製游標所在位置到行首的所有字元 y$ 複製游標所在位置到行末尾的所有字元
    p 將已經複製的內容粘貼到游標下一行 P 粘貼到游標上一行
    J 將游標所在行與下一行合并成一行
    u  撤銷
    ctrl+r 回複
    . 重複前一個動作
    x 代表dl(刪除當前游標下的字元)
    X 代表dh(刪除當前游標左邊的字元)
    D 代表d$(刪除到行尾的內容)
    C 代表c$(修改到行尾的內容)
    s 代表cl(修改一個字元)
    S 代表cc(修改一整行)
    Y 代表yy

如何進入編輯模式
    i 在當前游標所在處開始插入 I 當前所在行首插入
    a 當前游標所在處的下一個字元處開始插入 A 從游標所在行的最後一個字元開始插入
    o 當前所在行的下一行插入新的一行 O 當前所在行的上一行插入新的一行
    r 替換一個字元 R 一直替換游標所在的文字
    Esc 退出編輯模式
    編輯模式 命令很少 幾乎搜有嵌入字元都作為輸入內容

基本上來說,你應該儘可能少的呆在插入模式裡面,因為在插入模式裡面 VIM 就像一個“啞巴”編輯器一樣。很多新手都會一直呆在插入模式裡面,因為這樣便於使用。但 VIM 的強大之處在於他的命令模式!
你會發現,在你越來越瞭解 VIM 之後,你就會花越來越少的時間使用插入模式了。

命令模式下常用命令

搜錯與替換
    搜尋:/向下   ?向上  n 正方向  N 反方向 \c 忽略大小寫
    也可以將游標放到要搜尋的單詞上 * 向下搜尋 #向上搜尋
    尋找整個word 加上<>
    替換:n1,n2s/word1/word2/gc     n1-n2行間所有word1替換為word2 並需要使用者確認
    % 所有行  g表示要替換一行中的所有匹配項 c 需要使用者確認
   set ignorecase 忽略大小寫
   \c 正則忽略大小寫 \C 對大小寫敏感
   set nowrapscan 關閉迴圈搜尋
   /search/2 目標下位移兩行 -2向上
   /search/e+1 尾字元的 下一個字元 -1上一個字元
   /search/b+1 首字母的 下一個字元 -1上一個字元

檔案操作
    w儲存  wq儲存退出 q 退出 前面加上!就是強制 e! 還原檔案到初始狀態
    w filename  將編輯的資料存入到另一個檔案中 n1,n2 將n1到n2行之間的資料儲存至新檔案
    r filename 讀入一個新檔案
    ! 執行shell命令 shell 開啟一個新的shell
    ctrl+b 行首
    ctrl+e 行尾
    s +{left,right} 以單詞為移動範圍
    ctrl+w 刪除整個單詞
    ctrl+u 刪除整行
    ctrl+c 刪除命令列所有資料並退出命令列模式
    tab箭自動補全  如b edit vi 所不支援的
    ctrl+d 將所有合格資料顯示出來
    ctrl+l 最大限度的補全各符合項的共同部分
    history 顯示所有曆史命令
    ctrl+p 前一個 ctrl+n  下一個 不同與上下箭頭 根據已輸入的來搜尋
    q: 開啟命令列視窗 查看並可編輯 舊命令
    ! 所有shell命令必須前面加上! 如 !svn up ~
    shell 新開啟一個shell

visual模式 按v進入visual模式 (可視選擇模式)
    v 選擇字元
    V 選擇行
    ctrl+v 塊選擇
    o 重設游標到選擇地區的另一端
    O 同一行左右兩個角移動

替換模式
    r 替換單個字元
    R 一直替換游標所在的字元

vim 幾大常用方式

1.編輯多個檔案(重要)
    edit filename 開啟一個新檔案 edit! filename 強制不儲存開啟新檔案
    hide edit filename 不儲存當前檔案的修改去開啟新檔案 使被修改的檔案變成一個隱藏的緩衝區
    next 下一個檔案 wnext 儲存當前檔案並下一個 nnext n次
    previous 上一個檔案 wprevious 儲存當前檔案並上一個nprevio n次`
    last 最後一個
    first 第一個
    args 查看當前便加那個檔案
    ctrl+^ 兩個檔案之間快速切換
    ls 顯示開啟檔案清單
    b n 切換到第幾個
    write>>filelog 向檔案中追加內容
    saveas 另存新檔一個新檔案
    tabedit 新標籤頁開啟新檔案

2.分割視窗(方便)
    split filename 水平分割
    vsplit filename 垂直分割
    close 關閉分割視窗 q 也可以 但是close能保留最後一個視窗
    only 只保留一個視窗 其餘的全部關閉
    ctrl+ww 切換不同的視窗
    new 開啟一個新視窗並開始編輯一個新的緩衝區
    vnew 開啟一個儲值分割的視窗並開始編輯一個新的緩衝區
    nsplit 開啟一個高度為n行高的視窗
    ctrl+w +{hjkl} 在不同的視窗之間切換
    ctrl+w +{HJKL} 移動不同視窗的位置
    qall 退出所有的視窗退出vim
    wall 儲存所有視窗
    wqall 儲存退出所有的視窗
    vim -o 為每一個檔案開啟一個視窗

3.編輯程式(重要)
    vim的作者就是一個程式員,所以vim中有很多輔助寫程式的功能
    tag  位置 記錄一個標識符的定義未知
    ctags 產生tags檔案記錄所有標識符的出現位置,linux一般都會安裝 http://ctags.sf.net
    tag m 跳轉到m定義的地方 ctrl+] 跳轉到游標所在標識符的定義位置 3tag 跳轉到第三次出現的地方
    stag 分割視窗 ctrl+w+] 同理
    tags 列出使用過的tag
    ctrl+t 跳轉到上一次使用過的tag
    set tags=tags 設定tags檔案,要使用多個tags檔案的情況下
    tnext 下一個同名tag tprevious 上一個 tfirst 第一個 tlast  最後一個
    tselect 查看同名tag
    tab鍵可以補齊tag
    ptag 預覽tag定義 ctrl+w +}
    pcloase 關閉預覽視窗

4.代碼塊中的移動(重要)
    在代碼塊中的移動
    % 在()[]{}開始結尾處穿梭
    [[ 上一個代碼塊]] 下一個代碼塊
    [{ 代碼塊開頭  ]} 代碼塊結尾
    [/ 注釋開始 ]/注釋結束

常用技巧

掛起與恢複
    同linux作業控制一樣
    jobs 查看作業
    ctrl+z 掛起
    fg 恢複
    bg 調入後台執行
    & 後台運行
    kill 刪除作業也可以 fg +ctrl+c

檔案瀏覽
    edit .
    enter 開啟檔案或目錄
    ctrl+o 返回 或q
    o 開啟一個水平分隔的視窗顯示檔案
    v 開啟一個垂直分隔的視窗顯示檔案
    t 在一個新標籤頁中開啟檔案

    i控制列表顯示的風格(僅檔案名稱, 還是在一行中顯示詳細資料,
    逐行列出項目, 還是樹形顯示), 其中詳細資料風格包括檔案大小和日期資訊
    s重複按s會迴圈改變檔案排序的方式: 按檔案名稱排序, 按最後修改時間, 或者根據檔案大小.
    r切換正反向排序

縮排
    > 向右縮排 >>向右縮排游標所在行
    < 向右縮排 <<向右縮排游標所在行
    set shiftwidth=8 縮排量預設8
    set softtabstop=8 設定tab鍵的縮排量

儲存會話
    mksession 建立一個會話
    source  恢複會話
    vim -S 啟動的時候恢複會話

快速鍵入
    ctrl+p 自動補全 ctrl+n相反方向尋找補全
    尋找檔案的順序 1.當前檔案 2.其他視窗開啟的檔案 3.tag檔案
    ctrl+y 複製與上一行相同的內容
    ctrl+e 複製與下一行相同的內容
    縮寫(不重要,容易養成依賴性)
    iabbrev func function
    abbreviate teh the 自動錯誤修正
    abbreviations 列出所有縮寫
    unabbreviate 刪除縮寫

折行
    zf 建立折行
    zo 開啟折行
    zc 關閉折行

格式化文本
        = 與vitrual模式結合
    1,20 right 40 行的長度
    1,20center 40 行長度
    1left 5 5左邊留白的空格數目

切換工作目錄
    cd 更改目錄 其他視窗也會改變
    cd - 會在兩次工作目錄中切換
    lcd  局部視窗工作目錄切換
    pwd 查看當前工作目錄 和shell下命令列相同

常用設定
    set nu  顯示行號
    set nonu 不顯示行號
    set hlsearch 設定是否將搜尋的字串高亮顯示
    set autoindent 是否自動縮排
    set backup 是否自動儲存備份檔案 filename~
    set backupext 備份檔案尾碼名
    set ruler 是否在右下角顯示狀態行說明
    set backup 是否自動儲存備份檔案 filename~
    set showmode 是否在左下角顯示 insert replace 等模式
    set ignorecase 忽略大小 一般用於搜尋
    set wrap 顯示換行 nowrap不換行
    set textwidth=90 每行有90個字元,超出自動換行
    set linebreak  斷行不拆分單詞
    options 顯示所有設定的值

dos 與linux的分行符號不同
    set fileformat? 查看當前檔案格式
    set fileformats=unix,dos,mac 設定vim可以識別的檔案格式
    set fileformat=unix write 設定儲存檔案格式
    dos2unix -k 保留檔案的最後修改時間 -n 保留舊檔案 輸出到新檔案
    unix2dos

改變文字大小寫
    gu gU 與virtual模式組合

vimdiff 比較檔案
    vimdiff file1 file2    
    diffsplit file 對比一個新檔案
    vertical  開啟的視窗垂直分割
    set scrollbind 同步滾動
    ]c  向後跳到不同的地方
    [c 向前跳到不同的地方
    diffupdate 更新對比情況
    dp 消除當前行的差異
vim 加密檔案
    vim -x 加密檔案

恢複檔案
    vim -r wapfilename 恢複檔案

對多個檔案進行替換
    :argdo %s/\<word1\>/\<word2\>/ge |update  % 所有行 <>整個單詞 g單行所有 e找不到匹配項不報錯 update替換後進行儲存 |分割命令

個人習慣設定
    ~/.vimrc /etc/vimrc
    alias 設定別名

vimtutor 簡單學習手冊 如果您的系統中已經安裝了vim 那就進入vimtutor去學一下那簡單的命令吧,在shell命令列下鍵入vimtutor開始你的vim 學習之旅吧

六 常用配合開發相關命令基本介紹
    grep  用於尋找檔案內容 grep -iwr ./ 'serch' --include=*.php
    svn  版本控制命令 svn up svn st  svn log  svn diff svn merge svn ci
    history  曆史命令 !n 執行第n條命令 !! 上一條命令 !xx history中以xx開頭的命令
    jobs 作業 掛起 恢複 查看
    head  less  cat  tail 查看檔案內容

七 如何學習vim

   分為三個階段

  1.vim是特別難用 奇怪的編輯器

     一開始是notepad, word, edit壟斷你的大腦, 這些東西根深蒂固, 揮之不去Vim的使用對你而言是一場噩夢, 它降低而不是提高了你的工作效率. 對三種工作模式的不解甚至使你認為它是一個充滿BUG或者至少是一個古怪的與當今友好使用者介面嚴重脫節的軟體. 事實上, 這些起初看起來古怪的特性是Vim(或者是vi)的作者和它的使用者們在自己漫長的文字編輯和程式設計生涯中總結出來的最快速最實在的操作, 在幾乎等於電腦本身曆史的成長期中, 曆經無數嚴厲苛刻的電腦使用者的批評與檢驗, 無用的特性或糟糕的設計在Vim使用者群面前根本就沒有生存的餘地. Vim細心而謹慎的作者們也不允許自己精心設計的軟體裡有這樣東西.

  2.熟練使用vim替代guid編輯工具

你現在開始熟悉一些基本的操作, 這些操作足以應付你日常的工作, 你使用這些操作時根本就不假思索. 但這些階段你仍然很少去碰Vim那晦澀的線上協助文檔. 它在你心裡只是notepad, edit一個勉強合格的替代品

  3.已經不滿足第二個階段所使用的命令,總是試圖找到最少鍵入次數的命令

精益求精的你不滿足於無休無止的簡單操作, 冗長而乏味,有沒有更好的辦法可以四兩拔斤. 於是, 從UNIX參考手冊上, 從同事口中, 通過各種渠道,你總是去試圖

找到最簡潔最快速的操作。這是你使用Vim的最後一個階段, 也是最漫長最有挑戰性同時也充滿無數奇趣的階段. 你的頭腦因為要用Vim完成高效的編輯而高度緊張, 也開始發現你在Vim裡做了以前在SHELL裡做的幾乎一切事. 事實上你已經成了一個無可救藥的Vim骨灰級玩家。

八 vim的附加值 學習linux與效率

  1.由於要使用vim必須進入命令列 linux的命令列模式可以讓你避免一些如windows的幹擾 如彈窗 qq,讓你專心的去幹一件事情

  2.由於要使用vim 必須要再一些類unix系統 如linux系統  這也增加了你接觸linux的機會,試圖用linux下的工具解決一些問題 如grep

九 提高工作效率的幾點建議

  1.學習使用google日曆來規劃你的工作於生活

  2.做一件事情就是只做一件事情,不要這裡沒幹完又要去做別的  寫寫代碼  看看微博   寫完了 再看也不遲

  3.需求要好好想想再做

   

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.