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個性化配置

TAG:Vim | Vim插件 | vimrc |