vim的快捷键汇总

默认分类 · 2017-01-09

自用的vim快捷键汇总,部分自定义需要在.vimrc中增加配置

1.普通模式(normal)

^ – 光标移到当前行首不是blank的字符
g_ – 光标移到当前行尾不是blank的字符
w – 光标右移到下一个字的字首
e – 光标右移到本字的字尾
b – 光标左移到上一个字的字首
( – 光标移至句首
) – 光标移至句尾
{ – 光标移至段首
} – 光标移至段尾
ngg – 光标移至n行航首
n- – 光标上移n行
n+ – 光标下移n行
H – 光标移至屏幕顶行
M – 光标移至屏幕中间
L – 光标移至屏幕底行
c-u – 光标上翻半屏
c-d – 光标下翻半屏
* – 光标移至当前光标所在的下一个完全匹配的单词
# – 光标移至当前光标所在的上一个完全匹配的单词
N – 光标移至上一个搜索到的单词
,- 光标移至上一个f指定的字符
1 c-g – 查询当前文件的路径
c-o - 跳到上一个编辑位置,跨buffer切换
c-i - 光标跳回下一个编辑位置
s–删除当前字符,进入插入模式
C–删除当前字符至行尾,进入插入模式
c-j  – 光标移到下面分屏
u – 回退到前一个编辑的状态
c-r – 往前到下一个编辑的状态
"+p - 粘贴x剪贴板的内容
"+y - 复制vim选择的内容进x剪贴板
g c-g - 统计选中的部分的字数,最后一个为xx字符,xx字节
c-g - 显示当前文件和光标的粗略信息
% - 在匹配的括号间跳跃
{ or } - 按段落上/下跳跃
gf - 打开当前光标所在的文件名,如果确实存在该文件的话
dw daw dl dap de d0 d^ d$ dd - 删除
cw caw cl cap ce c0 c^ c$ cc - 删除并进入插入模式
yw yaw yl yap ye y0 y^ y$ yy - 复制
vw vaw vl vap ve v0 v^ v$ vv - 选中
w指光标往后的一个单词,包含空格
aw指光标所在的一个单词
l指1个字符
ap指1个段落
e指光标往后的一个单词,不含空格
0指本行的开头
^指本行不是blank的开头
$指本行结尾
dd、cc、yy、vv指对本行起作用
di分隔符 - 删除指定分隔符之间的内容 [不包括分隔符]
ci分隔符 - 删除指定分隔符之间的内容并进入插入模式 [不包括分隔符]
yi分隔符 - 复制指定分隔符之间的内容 [不包括分隔符]
vi分隔符 - 选中指定分隔符之间的内容 [不包括分隔符]
da分隔符 - 删除指定分隔符之间的内容 [包括分隔符]
ca分隔符 - 删除指定分隔符之间的内容并进入插入模式 [包括分隔符]
ya分隔符 - 复制指定分隔符之间的内容 [包括分隔符]
va分隔符 - 选中指定分隔符之间的内容 [包括分隔符]

Xi和Xa都可以在X后面加入一个数字,以指代所处理的括号层次 如 d2i( 执行的是删除当前光标外围第二层括号内的所有内容

dt字符 - 删除本行内容,直到遇到第一个指定字符 [不包括该字符]
ct字符 - 删除本行内容,直到遇到第一个指定字符并进入插入模式 [不包括该字符]
yt字符 - 复制本行内容,直到遇到第一个指定字符 [不包括该字符]
vt字符 - 选中本行内容,直到遇到第一个指定字符 [不包括该字符]
cf字符 - 删除本行内容,直到遇到第一个指定字符并进入插入模式 [包括该字符]
yf字符 - 复制本行内容,直到遇到第一个指定字符 [包括该字符]
vf字符 - 选中本行内容,直到遇到第一个指定字符 [包括该字符]

XT 和 XF 是 Xt/Xf 的反方向操作

zc - 折叠
zC - 对所在范围内所有嵌套的折叠点进行折叠
zo - 展开折叠
zO - 对所在范围内所有嵌套的折叠点展开
[z - 到当前打开的折叠的开始处
]z - 到当前打开的折叠的末尾处
zj - 向下移动到后一个折叠的开始处
zk - 向上移动到前一个折叠的结束处
xz和zx折叠功能要求set foldmethod=indent,缩进式折叠

q1j0xxxq – 宏录制及使用:1可以是1、2、3、a、b
c等代表寄存器的字母,后面j表示进入下一行,0表示
光标移动到行首,3个x对当前光标所在行删除3个字符
1个x表示删除1次,xxx可以替换为其他任何更改,比
如可以替换为dawdaw,意思是连续删除2个单词

@1 – 重复前面的q1j0xxxq进行的更改

7@1 – 重复7次前面的q1j0xxxq操作

K - 大写k,用于显示光标所在单词的help,前提是需要
set keywordprg=:help
:echo &keywordprg - 显示keywordprg选项的值,这样
vim的脚本中就可以使用各种选项了
:let &keywordprg=:help - 设置keywordprg选项的值
效果与set keywordprg=:help一样

==? - 比较两个字符串时忽略大小写
==#  - 比较两个字符串时匹配大小写

2.插入模式(insert)

c-r = 2+2  – 在光标处插入2+2的结果4
c-r 0 - 在插入模式下,将“0寄存器”的内容粘贴到光标所在位置
c-n – 自动补全buffer已经有的内容,或者多个选项往下选
c-p - 自动补全多个选项往上选
c-o j –退出插入模式,光标下移,进入插入模式
cx c-l  – 补全整行
c-x c-f – 补全文件名和路径
c-x c-n - 补全文件中的关键字
c-x c-o - 基于语义的补全
c-c - 退出插入模式

3.命令行模式(command)

:e filename – 打开filename文件进行编辑
:x – 保存文件并退出
:w !sudo tee % – sudo保存文件
:source .vimrc – 重新载入.vimrc
:source % - 重新载入当前打开的文件并检查语法
:verbose map <c-h> – 查询c-h按键的映射情况
:saveas file – 另存为文件file
:version –查看vimrc文件所在地,查看编译的模块
:echo $VIM –查看变量$VIM的值
:h operator –查看完整的操作符命令集
:only–只显示当前屏幕
:scriptnames - 显示已加载的脚本
:set runtimepath ? - 查看插件安装位置
:filetype - 查看filetype的相关状态
:pwd - 看vim的工作环境目录
:bd - 关闭当前打开的文件
:set fileformat=unix :w - 将文件存为unix格式
:echo 0x7f 036 - 分别返回16进制7f、8进制36的十进制值
:echom "hello" - 打印的信息,并在message中记录,echo在messages中不记录
:set all - 显示所有全局常量
:let - 显示所有全局变量
:set verbose = 20 - 每一个命令都会显示执行了哪些具体命令
:set verbosefile = vim.ver - 上面的命令写入文件vim.ver
:colo blue - 配色方案为blue,blue必须在rtp路径的某个colors目录下有blue.vim这个文件
:s/nihao/nima/g - 将选择范围的你好替换为nima
:echo v: - 显示vim预定义的全局变量
:echo g: - 显示vim所有的全局变量
:help internal-variables - 查看变量类型
:help functions - 按类型分组的所有vim内建函数
:help function-list - 按功能分组的所有vim内建函数
:nohlsearch - 取消搜索的高亮显示

:%s/^M//g - 替换文件尾部的^M符号,注意:上述命令行中的“^M”符,不是
“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的,或者Ctrl+v,再按回车。

4.vimrc配置

map <esc>w :bnext <cr> – 将alt+w映射为切换
到下一个buffer;guake utf-8下面有效;某些终端可
能map <m-w> :bnext <cr>会有效;无效时输入
:h map-alt-keys

unmap <esc>w – 取消alt+w按键映射
map – 映射后normal、visual、operator模式有效
nmap – 映射后normal模式有效
vmap – 映射后visual模式有效
omap – 映射后operator模式有效
map! – 映射后insert、command模式有效
imap – 映射后insert模式有效
cmap – 映射后command模式有效

let mapleader = "," – 将,映射为一个前缀,然后
就可以和map一起使用了

let maplocalleader = "," – 将,映射为一个前缀
,然后就可以和map一起使用了,只针对当前文件有效

noremap – 此后不再能二次映射,nnoremap同理
vim -u NONE - 不加载任何vimrc里的东西启动vim
vim -u .vimrc -加载当前目录vimrc里的东西启动

vim test.lua -V9vim.log - 每一部命令执行的结果
都写到vim.log文件中,9和vim.log中没有空格

5.自定义快捷键

tab - 自动缩进
c-h - 光标移当前行不是blank字符行首       [插入模式]
c-h - 光标移到左边一栏  [普通模式],nerdtree打开
c-j - 光标移下一行行首       [插入模式]
c-k - 光标移上一行行尾       [插入模式]
c-l - 光标移当前行行尾       [插入模式]
c-l - 光标移到右边一栏  [普通模式],nerdtree打开
c-d - 删除光标所在位置的字符 [插入模式]
c-b - 往回删除一个字符       [插入模式]
m-h - 光标左移一格       [插入模式] 
m-j - 光标下移一格           [插入模式]
m-k - 光标上移一格           [插入模式]
m-l  - 光标右移一格           [插入模式] 
c-x c-x - snipmate的触发按键
,n  - 切换下一个buffer
,add - 将当前文件夹所有文件加入git
,m - 提交git commit
,gp - 让git push到git.oschina.net
,i - 安装plugin
,y - 复制至公共剪贴板     
,a  - 复制所有至公共剪贴板 
,p - 从公共剪贴板粘贴
,rb - 一键去除所有尾部空白 
,rm - 一键去除^M字符  
,w - 保存buffer
,, -代替按一下空格等半天的尴尬
,nt - 打开/关闭NERDTree文件树窗口
,ev - 编辑当前所使用的Vim配置文件
,q - 退出vim
,o - 放大当前屏幕
vim
Theme Jasmine by Kent Liao