入坑 Vim 學習使用筆記

我的設定檔在這

新的Neovim 的設定檔,有附上使用說明歡迎給建議或是幫忙 Debug (?

還有一個以前用的 Vim 設定檔,不過沒怎麼更新了

基本操作

移動你的游標

  • w, W 往前到下一個字的字首,e, E 下一個字的字尾
  • b, B 往回到前一個字的字首
  • $ 跳到行尾
  • 0 跳到行首,^ 跳到該行第一個文字(不算 TAB 或是空白)
  • {, } 往前/後跳一個段落
  • f 之後按任意字元,跳到該行下一個的那個字元
  • f 之後按任意字元,按 ; 再下一個,按 , 回上一個
  • C_o 跳回上一個遊標的位置, C_i 跳到下一個
  • C_d 向下滾動,C_u 向上滾動
  • * 搜尋並前往下一個目前遊標上的字,:noh 取消
  • # 搜尋並前往上一個目前遊標上的字,:noh 取消

複製貼上

  • p 往後貼上,P 往游標前貼上
  • u 是 undo, C_r 再 Redo 回去
  • 也可以用 " 然後 a~z 來指定暫存器,例如 "ay 複製 "ap 貼上
  • d 是剪下,x 可以剪下遊標上的那一個字
  • c 可以刪除選取並原地進入插入模式,C 刪除該行以後並進入插入模式
  • >> << 可以縮排該行

寫字囉

  • i 插入模式 I 在該行第一個字進入插入模式
  • a 在遊標後面進入插入模式 A 在行末進入插入模式
  • o 向下產生新一行進入插入模式 O 向上
  • s substitute 代替,剪下遊標上的字並進入插入模式
  • r 取代一個字元
  • 插入模式下的操作
  • 在檔案取代 %s %s/foo/bar/gc g 是全部、c 是確認

比剛剛更會移動

標記模式

  • m{a-zA-Z} 按一下 m 加上英文字就可以在那個字上標籤
  • '{a-zA-Z} 單引號加上標籤就飛過去那一行囉
  • `{a-zA-Z} 單引號加上標籤就飛過去標記的字囉
  • 上面兩個也可以組合刪除,d'a 就是刪除刪到 'a 的地方
  • 刪掉他 delm aA delete mark a and A

選取大師

  • 選取技能之排列組合
    • 動作類型:
      • v visual 選取
      • d delete 剪下
      • c change 剪下後插入
      • y yank 複製
    • 範圍: i inner 選取物件條件 a around 包含選取條件
    • 名詞條件:
      • w word
      • s sentence
      • p paragraph
      • t tag (HTML, XML tags)
      • '" 引號
      • )]}> 括號
  • viw 選取遊標上的字 i=inner w=word
  • ciw 同上剪下遊標上的字並進入插入模式
  • vi" 選取 " 中間的字,' 也可以
  • va" 差別是會包含雙引號 a=around

切分頁(Tab) 囉

  • vim -p 檔案們,把他們開到新分頁
  • :e file.txt 在同一個分頁開啟新檔案
  • :tabe 開新分頁 (可以 :w 存起來)
  • gt 下一個分頁, gT 上一個分頁
  • :new 在上方產生水平分割 Windows, :vnew 垂直分割

你的 Buffer

:ls
  4  h   "plugin-config.vim"            line 3
  5 %a   "prelude.vim"                  line 50
  6  h   "[No Name]"                    line 1
  7 #h   "init.vim"                     line 5
 14  h   "filetypes.vim"                line 0
 15  h   "clipboard.vim"                line 1
 16  h   "[No Name]"                    line 0
Press ENTER or type command to continue
  • :ls 查看分頁內的 buffer 們
  • 切換分頁
    • :b + 數字 可以切換到指定 Buffer,例如 :b4
    • :b + 部分檔案名 也可以切換,例如 :b init
    • :bn go next buffer
    • :bp go previous buffer
    • :bl go last
    • :bf go first
  • :bd delete buffer

常用指令

想看 key mapping

你是不是設定了很多 key mapping 但忘記了呀?

:map

或是想指定模式也可以

:nmap for normal mode mappings
:vmap for visual mode mappings
:imap for insert mode mappings

輸出出來看的方法

:redir! > vim_keys.txt
:silent verbose map
:redir END

ref: https://stackoverflow.com/a/15756785

NerdTree

視窗切換

  • C_w + [上下左右] 切換到 [上下左右] 的分割視窗
  • C_w + w 切換到下一個分割視窗

NerdTree 視窗

  • 對檔案 t 開啟新分頁
  • 對檔案 o 開啟新分頁,並跳過去
  • 對資料夾 o 展開 / 縮合資料夾
  • 按下 m 會進入檔案管理模式
    • 再來按 a 可以新增檔案(資料夾的話就在後面加一個 /

Easy Motion

這裡的 <leader><Plug> 都用 , 來示範,因此指令都是 ,, 開頭

  • 跳到字元
    • ,,s search 跳到搜尋此字元的位置
    • ,,f 從游標往下 search,跳到搜尋此字元的位置
    • ,,F 從游標往上 search,跳到搜尋此字元的位置
  • 跳到字首
    • ,,b 從游標往下 search,跳到搜尋此字首的位置
    • ,,w 從游標往上 search,跳到搜尋此字首的位置

fzf.vim

  • :Files 搜尋檔案名稱 (綁定到 <leader>ff)
  • :Commands 搜尋指令名可能沒什麼用XDD (綁定到 <c-P>)

vim-visual-multi

  • c-n 選取遊標上的字
    • n N 選取下/上一個相同的字
    • q 跳過下一個選擇
    • Q 刪除目前選擇
  • 3c-n 選取接下來的 3 個
  • \\A 選取文件上全部遊標上的那個字
  • C-mouseleft 選取點擊字元
  • C-mouseright 選取點擊字

vim-fugitive

更方便使用 Git 的插件,Github 連結

  • :G 來呼叫 git 指令,例如說 :G commit -m init commit
  • :Git blame blame 一下都是誰寫了些什麼
  • :Gvdiff 呼叫出檔案更新差異 (好像也可以解 Confilet)

tpope/vim-surround

tomtom/tcomment_vim

  • <C-/> <C-/> 註解掉或是解開

telescope.nvim

Github Link

Ref

https://github.com/wsdjeg/vim-galore-zh_cn Cheat Sheet https://vim.rtorr.com/lang/zh_tw