这篇文章是看《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
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 d "_d vnoremap d " _d
""
匿名寄存器
"+
系统剪切板
"*
选择专用寄存器
vim 和 系统剪贴板打通
首先vim版本需要支持 clipboard vim --version | grep clipboard
要有 + 号
然后设置
set clipboard=unnamedplus
效果是系统粘贴版的东西能直接 p
粘贴, y复制的东西能直接 ctrl +v
https://advancedweb.hu/working-with-the-system-clipboard-in-vim/
https://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插件,列表如下
https://github.com/JetBrains/ideavim/wiki/Emulated-plugins
注意需要安装3个前置插件参照https://github.com/AlexPl292/IdeaVim-EasyMotion 否则配置了map key会不生效
常用插件
easymotion
argtextobj
multiple-cursors
surround
Vim实用哲学
- 先学会盲打,再学习vim
- 理想的范式,一键移动,一键执行
参考
https://www.bilibili.com/video/BV164411P7tw ideavim插件配置
https://www.bilibili.com/video/BV164411P7tw vim 上古神器
参考配置
https://www.jianshu.com/p/fd82bbed2c25
https://github.com/einverne/dotfiles/blob/master/idea/.ideavimrc
https://github.com/zhaohongxuan/dotfiles/blob/master/.ideavimrc