按功能划分出命令
光标移动
w
移动光标到下一个单词的词首,b
移动光标到上一个单词的词首;e
移动光标到下一个单词的结尾,ge
移动光标到上一个单词的结尾。
^
或者0
(数字零)光标移至当前行首。(0
- 移动到行首
^
- 移动到行首的非空白符)
$
光标移至当前行尾
#j
和#k
向下或向上移动#
行(set relativenumber 之后非常管用)
gg
光标移动到全文开头,在vim才有效,vi中无效
GG
光标移动到全文结尾
G
转到最后一行行首
ctrl u
和 ctrl d
控制屏幕滚动,同时光标跟着定位走。通过:set scroll=10
可以设定一次滚动的举例。
括号跳转:
%
跳到匹配的括号处,如下所有括号类型:{ }
[]
()
[{
跳到本代码块(由{}界定)的开头
[}
跳到本代码块的结尾
编辑(增删改)
a: 在光标的后面开始插入字符
A 在一行的结尾处开始插入字符
i 在光标处插入字符
I 在一行的开头处开始插入字符
o 在光标所在位置的下一行打开新行插入
O 在光标所在位置的上一行打开新行插入
ea
从当前单词末尾开始插入(非常实用)
dd
剪切当前行:,删除多行:3dd
(表示删除从光标位置开始的连续3行)
dw
剪切单词,可以实现清空右侧空白符。
J
(大写) 将下一行合并到当前行
r
替换单个字母,注意如果是替换为大写字母,建议用shift加目标字母触发,而不要用 caps lock。一个是从操作角度考虑,还得多余按一下 caps lock 还原操作;另一个是很多仿 vim 编辑器不识别 caps lock 按键
操作括号内内容:
ci'、ci"、ci(、ci[、ci{、ci< 分别更改这些配对标点符号中的文本内容
di'、di"、di(、di[、di{、di< 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi< 分别选中这些配对标点符号中的文本内容
c
本身的意思是改变,即删除并进入插入模式。
cc
清空当前行, 然后进入插入模式
cw
修改单词。修改光标位置到单词结尾处的单词。
caw
修改单词。修改光标所在的整个单词,即所在的整个单词全部删除后进入插入模式。
ct{某个字母}
修改单词。修改光标位置到某个字母之间的单词,只要碰到首字母就返回。
多窗口、多文件编辑
多窗口
(^表示ctrl)
^wv
垂直分割窗口(复制一个本窗口,其实是公用一个 buffer)
^wn
水平分割出新的未命名窗口
^wr
向右或向下方交换窗口,而^wR
则和它方向相反
^ww
切换窗口,forcus 和 blur 的切换
^wo
只保留当前窗口(window only)
:close
关闭当前窗口
多缓冲区文件
:ls
列出所有打开的缓冲区文件(等价于 :buffers
)
:b {number, expression}
跳转到指定缓冲区
:bd
关闭当前的单个缓冲区文件(注意关闭窗口不会关闭缓冲区文件)
ctrl+6
切换到下一个文件(必须事先打开过其他文件才可以切换)
多页签
:tabc
关闭当前页签
gt
切换页签(vim 命令模式)
按不同模式划分出的命令
命令行模式(Command-line mode)
主要是对文件整体进行的操作,包括设置,查找
:tab 文件路径
同时编辑多个文件 gt 进行切换不同Tab键
命令行模式下取到从第几行到第几行.
表示当前行 ,1,.
表示从第一行到当前行 ,比如:1,.d
就同样表示删除所有
echo $VIM(注意大小写)显示全局.vimrc的位置
:help {命令}
必要时刻去求助 help
:map
查看当前键盘映射有哪些
插入模式(Insert mode)
移动光标:原生的是上下左右键,可以映射配置成ctrl键控制
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
命令模式(也称普通模式)(Normal mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段
yy
复制当前行。经常与p
键连用,用作复制粘贴
yw
复制单词。
p
粘贴。p
表示粘贴别的东西进入vim
u
撤销
ctrl+r
重做(注意不是command)
ZZ
(注意是大写) 保存并退出vim
>>
或<<
单行缩进(即使光标在行中间位置也可以)
J
合并两行
.
重复上一次命令
可视模式(Visual mode)
用途:选择文件的一部分内容,以便作比如删除,复制等工作
o
切换可视模式的选中端点
复制选中区域: y
选择模式(Select mode)
gh
进入选择模式,然后移动光标开始选中。当再按下字符时可直接进行替换。
命令模式→可视模式
v
一个字符一个字符的选择
V
一整行一整行的选择
ctrl+v
列选取模式,可以选取竖行文本
其他综合功能划分出的命令
保存并退出vim:
:wq
或ZZ
或:x
底行命令行字符替换:
:#,#s/old/new/g
其中 #,# 代表的是替换操作的若干行中首尾两行的行号。
:%s/old/new/g
则是替换整个文件中的每个匹配串。等价于%s;old;new;g
(用分号做替换分隔符也可以)查找功能:向前搜索
/searchStr
向后搜索?search_text
全选:
ggVG
稍微解释一下上面的命令
gg 让光标移到全文开头
V 是进入Visual(可视)模式,并且是整行整行选取
G 光标移到最后一行全文格式化(format)缩进:
gg=G
防止粘贴时由智能缩进造成排版混乱:
:set paste
临时返回命令行界面以及重返vim
mac 下可以使用ctrl+z
(挂起vim)以及fg
(bring to foreground) 来返回 VIM
但在 cmder 中似乎不起作用,可以尝试使用:sh
来退出默认shell,返回命令行界面以及exit
来返回VIM如何查看vim 是否具有某个功能
vi --version |grep clipboard
查看是否具有clipboard 功能,有+
则表明由此功能。-
则表明无此功能。clipboard 命令会影响vim中的复制是否能复制到系统剪贴板。上下移动某单行
:{原始行号} m {移动到的目标行号}
移动到第几行(注意不是相对距离是绝对距离),从 0 开始计算。
:m +1
下移 1行
:m -2
上移 1行
或者dd{k、j移动}p
也不错。{行数}G
转到指定的行数,比如:9G,转到第9行。建议 G 用shift+g 触发,而不要用 caps lock + g 触发。插入列(等价于多光标输入)
ctrl+v
进入可视列模式
shift+i
从可视列模式进入插入模式,并输入要插入的内容
Esc
退回到命令模式,在每行的选定区域内新增选中的内容。
其他
vim不支持在command按键上绑定快捷键
操作系统差异。windows系统下用gvim命令,linux系统下用vim命令。
插件
emmet-vim插件
用<c-y>,
来触发标签扩展,也可以自制 snippet 看链接,具体没研究过。
nerdtree插件——file drawer
深入使用 nerdtree(好多快捷键需要进一步学习)
- 在vim 中唤醒 nerdtree 操作区:
tt
(自制快捷键)命令模式下切换目录文档 - 在 nerdtree 操作区的一些基本操作:
q
退出操作区
?
切换帮助菜单
go
预览文件内容
vim-autoformat插件
:Autoformat
自动格式化,目前针对 html
[ctrlp] fuzzy file finder (尚未使用)
[fugitive] Git Tool。有一些 Git 的高级用法,比如迅速切换各个版本的 commit 代码,一个按键多次还原代码。比如能看到各个行代码是谁提交的。
Vim 寄存器
- 使用
d
,c
,s
,x
等会删除字符的命令时,被删除字符会进入匿名寄存器""。 -
"*
和"+
在Mac和Windows中,都是指系统剪切板(clipboard),例如"*yy
即可复制当前行到剪切板。 - 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
- 查看 VIM 寄存器的内容,通过
:reg
非常系统的博客
vim中的配置项
vim的set relativenumber
和 set number
有冲突部分,set number
必须是在set relativenumber
之后做。
参考资料
总有你要的编程书单(GitHub)https://juejin.im/entry/5920f4f0a0bb9f005f4d9535
vim插件 http://vimawesome.com/
[vim 切换页签快捷键(还没完全应用成功)]https://www.liurongxing.com/vim-tab-shortcut.html
方方老师的配置:https://github.com/FrankFang/dot-files/blob/master/vimrc