2013年9月30日 星期一

VIM 總整理

由於VIM網路上有相當多的資源,當然直接去鳥哥找是最快,但是這裡紀錄幾個我最常使用的功能,日後會持續的增加:




  • 複製與貼上相關:
x, X
在一行字當中,x 為向後刪除一個字元 (相當於 [del] 按鍵)X 為向前刪除一個字元(相當於 [backspace] 亦即是倒退鍵) (常用)
dd
刪除游標所在的那一整列(常用)
ndd
n 為數字。刪除游標所在的向下 n 列,例如 20dd 則是刪除 20 (常用)
yy
複製游標所在的那一行(常用)
nyy
n 為數字。複製游標所在的向下 n 列,例如 20yy 則是複製 20 (常用)
p, P
p 為將已複製的資料在游標下一行貼上,P 則為貼在游標上一行! 舉例來說,我目前游標在第 20 行,且已經複製了 10 行資料。則按下 p 後, 那 10 行資料會貼在原本的 20 行之後,亦即由 21 行開始貼。但如果是按下 P 呢? 那麼原本的第 20 行會被推到變成 30 行。 (常用)
u
復原前一個動作。(常用)
[Ctrl]+r
重做上一個動作。(常用)
這個 u [Ctrl]+r 是很常用的指令!一個是復原,另一個則是重做一次~ 利用這兩個功能按鍵,你的編輯,嘿嘿!很快樂的啦!
.
不要懷疑!這就是小數點!意思是重複前一個動作的意思。 如果你想要重複刪除、重複貼上等等動作,按下小數點『.』就好了! (常用)


    • 區塊選擇應用:


    v
    字元選擇,會將游標經過的地方反白選擇!
    V
    行選擇,會將游標經過的行反白選擇!
    [Ctrl]+v
    區塊選擇,可以用長方形的方式選擇資料
    y
    將反白的地方複製起來
    d
    將反白的地方刪除掉


    • 搜尋相關:

    • / = 搜尋
    • n = 移往下一個搜尋結果
    • N = 移往上一個搜尋結果



    • 游標移動相關:

    • gg = 移到整份文件的最上方
    • G = 移到整份文件的最下方
    • H = 移到目前螢幕的最上方
    • L = 移到目前螢幕的最下方
    • 10Enter = 游標往下移動10行,前面的數字表示行數
    • :10Enter = 游標直接移動到第10行
    • {} = 把游標移動到上一個、下一個段落
    • Ctrlwj = 把游標往下面的分割視窗移動
    • Ctrlwk = 把游標往上面的分割視窗移動
    • Ctrlwh = 把游標往左邊的分割視窗移動
    • Ctrlww = 在各個分割視窗間切換

    • 書籤功能:


       mx : x 代表 26 個小寫英文字母,這樣游標所在處就會被 mark。

    `x 回到書籤原設定位置。
    • ` 是 backward quote,就是 Tab 鍵上面那一個。
    'x 回到書籤設定行行首。
    • ' 是 forward quote,是 Enter 鍵隔壁那一個。

    進階應用:
    • 小寫字母 只作用於單一檔案內。
    • 大寫字母 可作用於編輯中之各檔案間。
    • 數目字 可作用於前次編輯的十個檔案。
    數目字的用法比較特殊,'0 是回到前一次編輯檔案中離開前的最後位置,'1 則是回到前二次編輯檔案的最後位置,依此類推。您不必使用 m 來標示,vim 會自動記憶。很玄吧!其實這是 viminfo 的功能,您要認真追究的話,請 :h viminfo-file-marks。viminfo 關掉,就沒這個功能了!


    • 所謂前次指的是前次啟動的 vim。
    • :marks 得知目前所有書籤的列表








  • 尋找與替換:


  •     先記得替換的固定格式
      :[range]s/pattern/string/[c,e,g,i]
      
    range指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章,也可以 % 代表。還記得嗎? % 是目前編輯的文章,# 是前一次編輯的文章。
    pattern就是要被替換掉的字串,可以用 regexp 來表示。
    string將 pattern 由 string 所取代。
    cconfirm,每次替換前會詢問。
    e不顯示 error。
    gglobe,不詢問,整行替換。
    iignore 不分大小寫。

     以下以實際操作為主 , 日後將會隨著使用頻率來陸續新增常用的  
     ( NOTE!!  如果在命令指令時有特殊符號(i.e.    '.'    '\'   '>'   etc...)
      需要加"\" 符號來區分  ,遇到在下一個特殊符號還是要再加一次"\"  )
    • :%s/sub/add/g
                這是將所有範圍符合字串sub 替換成 add 
                ex.   sub
                        subway
                        subscript  
                 輸入指令後        
                        add
                        addway
                        addscript


    • :%s/\<sub\>/add/g
              這是將所有範圍必須"完全"符合sub之結果替換成add ,
               NOTE  ,   <xxx>  裡面的xxx即完全符合的目標 , 當然 "<"與">" 為特殊符號所以需加"\"  
                ex.   sub
                        subway
                        subscript  
                 輸入指令後        
                        add
                        subway
                        subscript


    • :%s/\..\/lib/\.\/lib/g
                  這是將所有符合   "../lib"   replace to "./lib"

        


  • VIM折疊:

  •          若覺得程式很大很煩 , 我一開始都會先自動折疊 :set foldmethod = syntax
             讓整個程式乾淨些 , 之後在針對我想要的部份 , 依照以下操作去打開與關閉.

    zo
    將游標所在處的折疊打開。open。
    zc
    將游標所在處已打開的內容再度折疊起來。close。
    zr
    將全文的所有折疊依層次通通打開。reduce。
    zm
    將全文已打開的折疊依層次通通再折疊起來。more。
    zR
    作用和 zr 同,但會打開含巢狀折疊(折疊中又還有折疊)的所有折疊。
    zM
    作用和 zm 同,但對於巢狀折疊亦有作用。
    zi
    這是個切換,是折疊與不折疊指令間的切換。
    zn
    打開全文的所有折疊。fold none。
    zN
    這是 zn 的相對指令,回復所有的折疊。
           
              當然想要自己手動折起來也是可以的 , 搭配zf , zF , zfap , 等等.

              NOTE!! 若想要一開始進去程式預設就是folding  , 可在vimrc增加
              set foldmethod=syntax.
           

          
    ---------------------------------------------------------------------------------------------------------

         若是想要更簡單的學習VIM,Jserv大大有翻譯一個正體的圖解學習VIM,
         也是非常好用!!
         如下:



       另外,我將整個vim的設定整理至github。


    資料來源:

    沒有留言:

    張貼留言