Vim實用技巧
這篇文章是看《Vim實用技巧》整理的一些筆記,以及日常使用vim的小技巧的收錄,保持更新
VIM
查找
f{char}
查找,;
向前查找 ,
向後查找跳轉到指定字符之上. F反向查找
t
查找字符,光標落在前一位,T 反向查找
dt.
刪除到 . 字符為止
*
查找當前光標下的單詞
移動
hjkl
左下上右移動
0
移動到行頭
^
移動到本行第一個不是blank的字符
$
移動到行尾
g_
移動到行尾最後一個不是blank的字符
fa
移動到本行下一個為a的字符處(;跳轉到下一個,,跳轉到上一個)
ta
移動光標到a字符的前一個字符處
zz
把當前行放在屏幕中間
zt
把當前行放在屏幕最上方
zb
把當前行移動到當前屏幕的尾部
gg
跳轉到第一行行首
G
跳轉到最後一行
H
跳轉到當前屏幕第一行
M
跳轉到當前屏幕中間
L
跳轉到當前屏幕尾部
%
括號匹配移動,(,{,[,需要先把光標移動到括號上
*
匹配光標當前所在的單詞
w
向前一個單詞,光標落在詞首
W
移動的是一個詞串,以空格為分隔
b
向後一個單詞,光標落在詞首
e
向前一個單詞,光標落在詞尾
ge
向後一個單詞,光標落在詞尾
gk
向上移動一個屏幕行
gj
向下移動一個屏幕行
g^
移動到屏幕行開頭
g$
移動到屏幕行結尾
一行文字佔了多個可視行時比較有用
m{letter}
標記當前光標位置
“{letter}` 回跳到光標處
增刪改
C
刪除當前字符到行尾,並進入插入模式,效果等同於 c$
s
刪除當前字符並進入插入模式 等同於 cl
S
刪除當前行並進入插入模式 等同於 ^C
I
光標移至行首,並進入插入模式,等同於 ^i
A
光標移至行尾,並進入插入模式,等同於 $a
o
下方插入一行 等同於 A<CR>
O
上方插入一行 等同於 ko
daw
刪除一個單詞
daW
刪除一個單詞,以空格作為單詞切分
c3w
修改3個單詞
dap
刪除整個段落
gUaw
把單詞變為大寫
guaw
把單詞變為小寫
g~aw
單詞大小寫翻轉
p
分為行模式和字符模式,取決於你複製的東西是什麼
行模式
p粘貼到光標所在行的下一行,P粘貼到上一行,當複製多行後一般會使用P
gP粘貼完以後,光標移動到被粘貼行的下一行的行首,行模式P粘貼相對於gP的好處是光標會在第二個複製的行上,方便直接修改
字符模式
p粘貼到當前字符之後,P粘貼到當前字符之前。gp 和 gP的差別是光標停留位置。gp是在被粘貼字符的最後一個字符,gP是被粘貼最後一個字符後面,當前粘貼後要做一些修改時,需要注意找到合適光標的位置
可視模式
V
選中行
ctrl+v
選中列
o
調整選區的兩端
U
選中直接變為大寫。普通模式下要用gU
,讓標籤中變為大寫 gUit
。可視模式不太適合需要重複執行的操作
u
選中直接變為小寫
~
翻轉大小寫
v/xx
選中從當前光標到xx 字符,然後可以執行刪除或其他編輯操作。通過查找進行移動/選區
命令模式
[range] delete [x]
剪切指定行到寄存器 x 中
[range] yank [x]
複製指定行到寄存器x中
[line] put [x]
在指定行粘貼寄存器x的內容
[range] copy {address}
將指定範圍內容拷貝到 {address} 之下
[range] move {address}
將指定範圍內容移動到 {address} 之下
:3,35 normal A;
ex 命令對相應行執行普通模式的命令
寄存器
reg "0
查看寄存器0 的內容
"0
複製專用寄存器, 複製的時候既會存到無名寄存器,也會存到”0
"_
黑洞寄存器 "_diw
刪除不保留副本
設置刪除而非剪切
nnoremap <leader>d "_d
vnoremap <leader>d "_d
""
匿名寄存器
"+
系統剪切板
"*
選擇專用寄存器
vim 和 系統剪貼板打通
首先vim版本需要支持 clipboard vim --version | grep clipboard
要有 + 號
然後設置
set clipboard=unnamedplus
效果是系統粘貼版的東西能直接 p
粘貼, y複製的東西能直接 ctrl +v
//advancedweb.hu/working-with-the-system-clipboard-in-vim/
//stackoverflow.com/questions/30691466/what-is-difference-between-vims-clipboard-unnamed-and-unnamedplus-settings
ideavim中設置了 set clipboard=unnamedplus
是生效的,但是mac自帶的vim不生效,查了下mac上一般推薦使用macvim,因為mac上的剪切板會有很多奇怪的行為
使用MacVim,並打通剪切板,這裡測試 set clipboard=unnamedplus
並不work,不太清楚啥原因
~/.vim/vimrc
set clipboard=unnamed
~/.zshrc
alias vim='/Applications/MacVim.app/Contents/MacOS/Vim'
粘貼系統剪貼板的東西,為了避免錯位應該使用 set paste
宏
.
重複上次操作
q{register}
錄製宏
q
結束錄製
:reg {register}
查看宏內容
@{register}
執行某個宏
@@
執行某個最近執行的宏
10@@
執行10次最近執行的宏
串行執行宏 10@@
並行執行宏 行模式高亮選中,再執行:normal @@
這樣是並行執行的,並且某行執行失敗不會影響其他行
文件操作
:100,200w filename
保存某些行到新文件
:100,200w! filename
保存某些行到新文件 覆蓋文件的形式保存
IDEA常用快捷鍵
有一些是自定義的
快捷移動和刪除
ctrl-w
刪除前一個單詞
ctrl-u
刪除到行首
ctrl-k
刪除到行尾
ctrl-a
到行首
ctrl-e
到行尾
在使用IdeaVim後有一些快捷鍵會和vim衝突,需要根據自己習慣進行設置
窗口分屏
ctrl + 1
左右切分窗口
ctrl + 2
上下切分窗口
ctrl + 3
把當前窗口移到對面
ctrl + 4
unsplit all
option + tab
鼠標在窗口之間跳轉
cmd + shift + []
在一個split內切換窗口
IdeaVim
在idea中使用vim,通過ideavim插件來實現,ideavim中也內置了一些vim插件,列表如下
//github.com/JetBrains/ideavim/wiki/Emulated-plugins
注意需要安裝3個前置插件參照//github.com/AlexPl292/IdeaVim-EasyMotion 否則配置了map key會不生效
常用插件
easymotion
argtextobj
multiple-cursors
surround
Vim實用哲學
- 先學會盲打,再學習vim
- 理想的範式,一鍵移動,一鍵執行
參考
//www.bilibili.com/video/BV164411P7tw ideavim插件配置
//www.bilibili.com/video/BV164411P7tw vim 上古神器
參考配置
//www.jianshu.com/p/fd82bbed2c25
//github.com/einverne/dotfiles/blob/master/idea/.ideavimrc
//github.com/zhaohongxuan/dotfiles/blob/master/.ideavimrc