预备知识
:echo $MYVIMRC
得知.vimrc
文件的位置
打印信息
:echo "Hello, world!
,信息不会保存
:echom "Hello, world!
,信息会保存
:messages
,查看信息
设置选项
:set <name>
,打开选项
:set no<name>
,关闭选项
:set <name>!
,切换选项
:set <name>?
,查看选项当前值
:set <name>=<value>
,改变非布尔选项的选项值
:set <name> no<name> <name>=<value> ...
,设置多个选项的值
基本映射
:map 映射命令 原命令
<keyname>
可用于特殊字符(按键)
模式映射
nmap
,normal模式下有效
vmap
,visual模式下有效
imap
,insert模式下有效
精确映射
非递归映射,任何时候使用
noremap
,任何模式下有效
nnoremap
,normal模式下有效
vnoremap
,visual模式下有效
inoremap
,insert模式下有效
Leaders
let mapleader = ";"
,Leader
:let maplocalleader = ","
,Local Leader
Abreviations
用于insert、replace和command模式下
iabbrev 输入字符 输出字符
Keyword Characters,输入非字母、数字、下划线的字符就会引发abbreviations替换
本地缓冲区的选项设置和映射
映射,e.g. :nnoremap <buffer> <localleader>x dd
设置,:setlocal <name>
:setlocal no<name>
遮盖,本地缓冲区的映射会遮盖全局的映射
自动命令
autocmd <event0>,<event1>,... <pattern> :<command>
FileType事件,e.g. autocmd FileType python nnoremap <buffer> <localleader>c I#<esc>
本地缓冲区缩写
iabbrev <buffer> 输入字符 输出字符
自动命令组
为防止.vimrc
中的autocmd ...
自动命令被重复加载,需要将其放置在自动命令组中,并在自动命令组开头加上清除命令:
e.g.
1 | :augroup testgroup |
Operator-Pending映射
一个Operator(操作)就是一个命令,你可以在这个命令的后面输入一个Movement(移动)命令,然后Vim开始对文本执行前面的操作命令,这个操作命令会从你当前所在的位置开始执行,一直到这个移动命令会把你带到的位置结束。
常用Operator有d
、y
和c
,e.g.
按键 | 操作 | 移动 |
---|---|---|
dw | 删除 | 到下一个单词 |
ci( | 修改 | 在括号内 |
yt, | 复制 | 到到逗号 |
Movement映射,:onoremap 映射命令 原命令
下面两条规则可以让你可以很直观的以多种方式创建operator-pending映射:
- 如果你的operator-pending映射以在可视模式下选中文本结束,Vim会操作这些文本。
- 否则,Vim会操作从光标的原始位置到一个新位置之间的文本。
e.g. :onoremap ah :<c-u>execute "normal! ?^==\\+\r:nohlsearch\rg_vk0"<cr>
execute
用于替换字符串中的所有特殊字符串
normal!
用于执行后面的字符
状态条
状态条中代码的通用格式:%-0{minwid}.{maxwid}{item}
,除了%
和item
外其他都是可选的
分割,可以使用+=
来一条一条地定义要显示的代码