搜尋

首頁  >  問答  >  主體

如何高效使用Vim

新手剛接觸Vim,希望大蝦們推薦一些入門的練習教程,現在還只是把Vim當成普通編輯器使用..還有,按Esc回到普通模式好像有點麻煩,要伸到鍵盤的左上角,有沒有什麼簡單的方法呢?先謝謝了!

PHP中文网PHP中文网2783 天前1646

全部回覆(18)我來回復

  • 为情所困

    为情所困2017-05-16 16:44:38

    用vim 快兩年了 看過教程也不少,總的來說還是得自己多練習,當自己覺得有需要的時候,再添加功能。這裡分享個看過的最好的教程,出自貼吧的某個朋友,寫的很好

    學會盲打

    設定檔先從最簡開始,在 伍級 前別考慮設定插件,千萬別硬背指令,千萬別直接取用別人的設定檔
    基本上還是長時間待在 insert mode 下,會覺得 vim 也不過爾爾,也不好用,

    這個時候,編輯效率可能比用原來的一般編輯器還低,別人問使用什麼編輯器時,
    多半會回答:vim 再配一個 nano, kate, kwrite, gedit, geany 或其他 IDE 之類的

    養成習慣待在 normal mode(normal 不是白叫的),只有輸入時才進入 insert mode,輸入完馬上
    學習 normal mode 下的移動指令,這個時候輸入文字標準流程:

    1. normal mode 移動指令準確定位遊標(記住,搜尋指令也是移動指令)
    2. 進入 insert mode 編輯(進入 insert mode 別只用 i,要習慣視乎情況,使用 I a A o O s C)
    3. 回傳 normal mode

    這個時候,編輯效應會恢復到和你之前使用的普通編輯器一樣,甚至有少量提高

    學習什麼是 operator(指令 d y c 等),什麼是 motion(所有能移動遊標的指令,h j k l w e f t / ? 等等),
    學習 operator + motion 的方式,如 ct. (將目前遊標到 . (點) 之間的內容刪除並進入 insert mode 準備修改)
    學習基礎的 Ex 指令,:s 什麼的

    這個時候,編輯效率開始明顯提高,在用其他一般編輯器時,會開始覺得不習慣和低效率

    學習 text-objects,知道 operator + text-objects 的方法,可進行手術般精準的定位和修改,
    既然你主要用在 c/c++,舉出一些在這個情況下有用的例子:

    ci" (由 change operator 和 text-object i" 組成)

    這個指令會找到目前遊標所在行的下一個" 括起來的字串,清除引號裡面的內容,並進入insert mode 以方便修改
    用起來比解釋起來簡單,你可用const char* hello = "Hello world ."; 類似這樣的程式碼來測試

    yaB (由 yank operator 和 text-object aB 組成)

    這個指令會將目前遊標所在的程式碼區塊({} 括起來的內容,包括花括號本身)複製到預設register,
    方便在其他地方用p 貼出來(當然,寫程式碼不鼓勵copy and paste),你可用用任何一個{} 來測試,然後找另一個地方p

    gUiw (由 make uppercase operator 和 text-object iw 組成)

    這個指令會將目前遊標所在的 word 全部變成大寫
    如將 max_size 變成 MAX_SIZE

    這個時候,開始知道為什麼 vim 精確高效,而且並不是因為全鍵盤無需滑鼠

    習慣 operator + motion 後,發現 . 指令很好用,多注意使用可重複的指令組合
    練習使用書籤定位,q 記錄宏,使用多個 register,使用 args,使用 buffer
    使用其他的 Ex 指令

    這個時候,想不起沒用 vim 之前的日子是怎麼過來的

    開始 map 經常反複使用的命令,開始寫 vimscript,開始知道自己需要什麼樣的插件
    試推薦幾個:
    pathogen 或 vundle,tagbar, CtrlP, Gundo, UltiSnips,surround,Syntastic,Conque,ack.vim,vim-commentary,fugitive(如果是 git 用戶)
    還有不少,但多對 c/c++ 沒直接幫助,就不提了

    這個時候,對其他編輯器提不起興趣,或許 emacs 除外

    擁有完全個人化的 vimrc,基本上進入化境,成為江湖上的傳說
    常有旁人觀察你編輯後,激起雄心壯志想要學 vim,嘗試幾個小時候因為覺得熱鍵太不"人性化」而放棄,
    但偶爾會向人提起他見過江湖上有你這麼一號人物

    回覆
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 16:44:38

    我使用vim有一年了.日前正要寫一個vim的cheat sheet,就提前在這裡寫下吧。

    首先 vim != gvim

    1.怎麼編輯

    任何時候按下ESC鍵會進入普通模式.普通模式下可以按下: 來輸入指令.

    普通模式按i或a 進入插入模式,這時你可以編輯文字。

    2.簡單編輯

    • 移動遊標 :你可以直接用方向鍵來移動遊標, 更vim些的做法是hjkl
    • 儲存檔案,普通模式下 :w .退出編輯 :q ,強行儲存 :w! 強行退出: :q!
    • 撤銷操作 :u 或普通模式下按u

    3.更快的編輯

    現在你可以用vim寫東西了.

    我們需要更快的編輯

    1.快速的定位遊標:

    • ^ 跳到行首 (​​類似功能鍵Home)
    • $ 跳到行尾(類似功能鍵End)
    • :n 跳到第n行
    • :$ 跳到最後一行

    2. 快速的編輯:
    在普通模式下:

    • dd 刪除一行
    • yy 複製一行
    • p 貼
    • r 單一字元替換

    3. 更精細的貼上複製:

    • m,nd - 快速刪除第m到第n行 (delete)
    • m,ny - 複製第m到第n行 (yank)
    • m,nmt - 第m行到第n行剪切到第t行(move)
    • m,ncot -第m行到第n行複製到第t行(copy to)

    4. 搜尋
    普通模式下按下 / 向下搜尋, 按?向上搜尋
    5.對齊
    gg=G 快速對齊整個檔案
    6.標籤操作

    • :tabnew mytab 新建一個標籤mytab
    • :tabn 跳到下一個標籤
    • :tabp 跳到上一個標籤
    • 用gt或gT在普通模式下跳到下一個和上一個標籤

    7. 切割窗口操作

    • :split 水平方向切割一個窗口
    • :vsplit 垂直方向切割一個窗口
    • 用Ctrl-w+方向鍵 在各個切割視窗之間切換。

    4.讓vim更懂你

    有沒有註意到我們以上一直沒有提到vimrc和插件。

    現在到時候了。

    比如,我們coding時喜歡顯示行號:指令模式下:set nu或 :set number

    關於vimrc, 有很多值得研究商討的地方,你可以參考下我的vimrc, 我都進行了詳細的中文註釋

    5.關於外掛和主題

    vim 的配色有三種比較有名,solarized , molokai , badwolf

    關於vim 的插件,只有這麼幾句需要說:

    • 一定要使用vundel來管理外掛。
    • 不要修改別人的插件,要嘛你就自己fork了修改,然後bundle你的插件。
    • 可以研究下怎麼用git submodule來管理你的外掛。

    好了,吃飯去。 。到此。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:44:38

    無他,唯手熟耳。

    " Arrow keys are evil
    map <up>    <nop>
    map <down>  <nop>
    map <left>  <nop>
    map <right> <nop>

    另外,Ctrl-[ 也可以退出編輯模式。

    回覆
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:44:38

    嗨!我提供一個非常棒的方法:
    玩 vim 遊戲!

    如果你是使用 Ubuntu 系統,請輸入:

    1. sudo apt-get install vimtutor
    2. vimtutor

    或透過一個很酷的網頁 vim 遊戲:

    vim 冒險家
    http://vim-adventures.com/

    回覆
    0
  • 为情所困

    为情所困2017-05-16 16:44:38

    hey~! 我實在是不知道怎麼用 vim, 只有我的手知道. (熟能生巧)

    不喜歡用 esc 可以用 效果一樣.

    多看 vim tips, 多學各種 vim 插件.

    話說回來了, 人家只是個文字編輯器而已, 別本末倒置了.

    分割線

    順便推薦一個vim 的插件集合, 叫做Janus, 它對自己的定義是Janus: Vim Distribution. 它提供了一個完整的, 必需的vim 基本設置和大多數人都需要的插件, 以及繼續自訂vim 的解決方案. 多說無益, RTFM.

    回覆
    0
  • 習慣沉默

    習慣沉默2017-05-16 16:44:38

    用vim主要是自己定義各種功能,使用各種插件。 主要是設定vimrc, 你可以參考別人的vimrc,在github上搜尋vimrc,例如https://github.com/search?q=vimrc&ref... ,看看別人是怎麼配置的,改成自己的就ok了。

    esc可以用jj 或 jk 代替。

    inoremap jk <ESC> 

    回覆
    0
  • 为情所困

    为情所困2017-05-16 16:44:38

    看完自帶的教程(有中文的,下載鏈接,下載需要翻牆),但是不用死記硬背,只要記住有哪些功能就可以了。

    遇到似乎可以用到這些功能的地方就開始查閱教程,然後慢慢的你查的會越來越少,越來越少,慢慢的你就會了。

    舉例:

    Hello World foobar

    如果你想刪除foobar ,那麼你可以用ffdw這個組合指令(f是在一行內查詢,後面那個f就是foober 的首字母,這是指令的第一部分,將遊標移到foobar這個字上面,d是刪除,w是選取一個詞,組合起來就是刪除一個字),非常快捷,而且都是簡單指令的組合。

    然後如果你想要處理比較複雜的場景,例如

    foobar
    foobar
    foobar
    foobar

    只把前面的foo 刪掉,留下那個bar,這時候雖然vim提供了處理的功能,但是我們不用管,用宏錄製的功能(能保存你的操作,你可以簡單的重複)把簡單的指令組合起來,就可以做很多很複雜的工作了

    例如上面這個例子(手頭暫時沒有Vim,憑記憶可能有錯),

    qa (将命令录制到a这个剪贴板上{vim有好多个剪贴板,比如abcdefg……})
    3x (重复三遍删除操作,将foo删掉,其实也可以用f命令来搭配,对复杂的情况更适用)
    0 (移动到行首)
    j (移动到下一行)
    q (停止录制)
    3@a (重复三遍刚才录制的命令,3就是将命令重复3遍,@就是运行,a就是刚刚保存的那个剪贴板)

    這就解決了。

    Vim 根本不難,原因在於90%的狀況都只要很簡單的一些指令的靈活搭配。

    剩下10%的狀況查教學也很容易知道。你讓一個會用Vim的人默寫命令,在比較所有的命令,會發現人家只知道很小一部分。

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-16 16:44:38

    上面的人說的都很詳細了,不過對於esc鍵建議用改鍵之類的換成Caps Lock這樣按起來要方便很多。

    據說RMS寫Emacs的時候的鍵盤是這樣的
    很明顯Esc和Control的距離要很舒服的,如果有錢也要進一塊HHKB吧。

    回覆
    0
  • 阿神

    阿神2017-05-16 16:44:38

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-16 16:44:38

    http://vim-adventures.com/
    根據vim操作寫的小遊戲,遊戲同時練習vim操作。

    回覆
    0
  • 取消回覆