vim 雜談 - 關於移動
這個專欄的主要目的, 是介紹後台開發, vim, python, 工具, 效率, 項目等等一些所思所想. 歡迎關注及交流.
k-vim 這個項目, 雖然一年只更新一兩次, 但是裡面很多配置, 都是基於使用中的痛點, 以及 符合自覺 的原則進行的變更.
整體而言, k-vim 雖然做成了一個開箱即用的配置, 但是很多使用者更想知道一些更具體的說明, 包含配置項, 配置原因等等.
之前有個blog有提過一句
Don』t put anything in your .vimrc you don』t understand!
雖然我不是十分贊同(我更傾向於基於一個完備的配置再進行深入了解和 DIY, 畢竟從0打造成本略高).
但是覺得有必要, 寫一寫, 談一談vim中的一些配置的原因.
目測會成系列, 從前到後你也能個性化自己的完整配置. 也可以借鑒一些技巧和插件使用(總共會提及約60+插件)
第一篇, 移動.
HJKL
一談到移動, 首先想到的是hjkl, 最基本的上下左右
h 左移nl 右移nnk 上移nj 下移 (記憶 jump)n
當然, 左右只是字元間移動, 上下是行之間的移動
優化HJKL
首先, 為了防止自己情不自禁使用 上下左右 方向鍵, 可以禁用之.
" 關閉方向鍵, 強迫自己用 hjklnmap <Left> <Nop>nmap <Right> <Nop>nmap <Up> <Nop>nmap <Down> <Nop>n
其次, 當一行超長之後, se wrap, 一行就顯示為多行(一個物理行 - 多個展示行), 如果是默認配置, 使用 jk 移動時, 將會是物理行維度的, 而直覺上應該在展示行維度跳轉(視覺上), 所以加配置, 使得jk在展示行之間上下跳轉
"Treat long lines as break lines (useful when moving around in them)n"se swap之後,同物理行上直接跳nnnoremap k gknnnoremap gk knnnoremap j gjnnnoremap gj jn
另外, 當上下移動時, 默認游標到頂/到底後, 再用jk時, 游標是貼著終端頂部或底部的, 需要配置, 保證游標距離頂部或底部一定行數, 這樣顯示視覺效果更好.
" 在上下移動游標時,游標的上方或下方至少會保留顯示的行數nset scrolloff=7n
單詞間移動
wbe, 原先是wWbBeE, 大小寫都是有各自含義的, 但是, 更懶的做法, 只用小寫wbe, 畢竟, 使用大寫WBE, 你還得多按一個shift鍵, 以及, 肌肉記憶下, 操作的一瞬間, 你很難將你想要的和使用大寫還是小寫分別代表什麼動作, 句子里哪個是標點關聯起來.
所以, 直接無視大寫吧
w 移到下一個單詞 (記憶 next word)nb 移動到單詞開頭 (記憶 back)ne 移動到單詞尾部n
關於 0和$, 以及 HML 的優化
0和$, 分別是
0 移動到行首n$ 移動到行尾n
而, 0, 需要手指離開字母區, $更慘, 還得多按一個shift. 另外其實還有個^的, 實在按不著>_<#
HML 是同屏間, 快速移動到屏幕頂部/中間/底部, 頂部和底部還好, 中間到底在哪? 具體哪一行, 這個是比較范的操作, 非精確操作(不能一次性移動到想要的位置), 所以我的結論是: 廢掉
將H映射成移動到行首(最左邊), 將L映射成移動到行尾(最右邊), 和原先hjkl意義同, 且在字母區. 更符合直覺
" Go to home and end using capitalized directionsnnoremap H ^nnoremap L $n
行內: fFtT
f/F, 同一行內向前/向後跳轉, 而t/T同, 只是會調到目標位置的前面一個字元
我的做法是, 忘掉tT, fF更符合直覺, 真正的指哪到哪, 而且f=find也好記
f 跳轉到向前搜索的字母位置nF 跳轉到向後搜索的字母位置n
在這裡, 推薦一個插件(被動生效), 可以高亮顯示目標字母: quick-scope A Vim plugin that highlights which characters to target for f, F and family. No mappings are needed.
文件: 關於 ctrl + fbud
ctrl + f/b 下翻/上翻一頁, 而ctrl + u/d 下翻/上翻半頁.
我的做法是, 忘掉ctrl + f/b, 只用ctrl + u/d
我們經常做的操作是, 不停的上翻/下翻, 連續動作, 一整頁太多, 看內容很容易思維上斷開, 需要返回去重看, 而半頁有一半的東西是連著的; 而對於使用壓掌大法按ctrl的人來說, 按住ctrl再反覆fb, 特別是 b, 特別難按, fb都在左邊, 左手太累
而ud, 可以將操作放到兩手, 也方便(肌肉)記憶
ctrl + u 上翻半頁(記憶 up)nctrl + d 下翻半頁(記憶 down)n
文件: 頭尾和某一行
gg 跳轉到文件頭nG 跳轉到文件尾nn:n 精確移動到第幾行n
記住這三個, 基本夠了吧?
分屏移動
ctrl + w + hjkl 是默認分分屏的快捷鍵, 去掉w更快些
" 分屏窗口移動, Smart way to move between windowsnmap <C-j> <C-W>jnmap <C-k> <C-W>knmap <C-h> <C-W>hnmap <C-l> <C-W>ln
插件: 標記跳轉增強 vim-signature
默認, m + 字母, 可以在當前打一個標記, 然後 反引號+字母 可以跳轉到標記行
但是存在的缺點是: 標記不可見, 且反引號實在難按
所以做了些增強
安裝這個插件: vim-signature
具體安裝/配置/演示: VIM插件: VIM-SIGNATURE(快速標記跳轉)
" 交換 單引號/反引號, 使得可以快速使用 單引號 跳到marked位置nnnoremap `nnnoremap ` n
其常用的幾個快捷鍵
" 顯示marks - 方便自己進行標記和跳轉n" m[a-zA-Z] add markn" [a-zA-Z] go to markn" m<Space> del all marksn" m/ list all marksn" m. add new mark just follow previous markn
插件: 終極跳轉 easymotion
有一個插件, 對跳轉做了深入的定製, 那就是: vim-easymotion
安裝了之後, 簡直想怎麼跳就怎麼跳. 作為一個必備插件, 大家有必要深入學習下用法, 跳轉效率翻倍
之前寫的一篇博文介紹: VIM插件: EASYMOTION(快速跳轉)
- 用法1: 跳轉到當前游標前後的位置(w/b)
- 用法2: 搜索跳轉(s)
- 用法3: 行級跳轉(jk)
- 用法4: 行內跳轉(hl)
- 用法5: 重複上一次動作(.)
具體配置及演示見博文
其他
vim中跳轉的配置大抵這些就夠用了.
下一篇, 將介紹如何快速編輯. 後續還有搜索替換等等一系列內容
推薦閱讀:
※有哪些完整的 Vim 視頻教程?
※Vim到底可以配置得多漂亮?
※有哪些編程必備的 Vim 配置?
※一些vim個性化配置