// vimrc
键盘映射
noremap n h // 用h 替换 u
map S :w<CR> // 用大写s 替换w做保存
// 小写s是删除当前字符并进入写入模式,可以用其他建代替,可以把s替换为nop(no operation)
map s <nop>
map R :source $MYVIMRC<CR>
syntax on // 打开文本高亮
set number or set nu // 打开行号
set nu! // 打开或取笑行号
set list // 显示不可见字符
set cursorline // 设置光标线
set wrap // 代码换行
set showcmd // 显示当前敲击命令
set wildmenu // tab补全
set hlsearch or set hls // 设置搜索高亮
set incsearch or set inc // 边输入边高亮
set nohlsearch or set noh // 取笑搜索高亮
set ignorecase or set ic // 忽略大小写0.
set scrolloff=5 or set // 底部永远显示5行
set spell or set // 拼写检查
normal mode
<operation> <motion>
ciw // c 删除并进去插入模式,i in,w当前word。删除当前word 并进入插入模式
ci"/</(/{/[ // 删除"或<或(或{或[号中的所有字符并进入插入模式
di"/</(/{/[ // 删除"或<或(或{或[号中的所有字符但不进入插入模式
vi"/</(/{/[ // 选中"或<或(或{或[号中的所有字符
yi // 复制选中字符
yw //复制光标所在到word结束
yiw //复制光标所在word
yy // 复制当前行
y^ 复制至行首,或y0。不含光标所在处字符。
y$ 复制至行尾。含光标所在处字符。
yw 复制一个单词。
y2w 复制两个单词。
yG 复制至文本末。
y1G 复制至文本开头。
f // find +字符,寻找字符,前可以加相应的cdy等操作,如yf: 表示复制直到冒号的字符
选中 u // 全部转为小写
选中 shift u // 全部转为大写
选中 ~ // 小写变大写,大写变小写
zz // 将当前行设置为中心。
zt // 将当前行移动到屏幕顶端。
zb // 将当前行移动到屏幕底端。
H // 将光标移动到屏幕顶
M // 将光标移动到屏幕中间
L // 将光标移动到屏幕底
ZZ // 大写zz保存并退出
ctrl b // =page up 上翻
ctrl f // =page down 下翻
:行号 // 跳到某一行
行号gg/G // 跳到某一行
行数 j/k // 上下跳固定行数
ctrl o // 回到之前的位置
ctro i // 回到回到之前的位置
ctrl n // 自动补全向下选择
ctrl p // 自动补全向上选择
ctrl a // 移动光标到数字上,按下数字加一
ctrl x // 移动光标到数字上,按下数字减一
u // 撤销
U // 撤销整行
ctrl r // 取消撤销
:! // 后接外部命令
:r // 后接外部命令或者文件名,并取出到当前文本中
:tabe, tabnew // 如果加文件名,就在新的标签中打开这个文件, 否则打开一个空缓冲区。
gt // 切换页面
:split // 上下分屏
:vsplit // 左右分屏
:only // 仅保留当前窗口
:hide // 关闭当前窗口
insert mode
ctrl y // 复制上一行字符
visual mode
v // 进入可视模式,移动方向键可选中多个字符
shift v // 选中一行,移动上下键可选中多行
在visual mode下按下:后输入normal 后就可以进行normal模式下的操作了,区别是会对选中的区域同
时操作。
如 v :<> normal icmd // 在选中行前插入字符cmd
visual block mode 可视块模式
ctrl v // 进入可视块模式 移动方向键可调整块范围
:shift i //在选中块前插入,输入字符后按esc,即可批量更改。
daw 删除当前字符所在单词
dd 删除当前行
dj 删除下一行
dk 删除上一行
dgg 删除当前行至文档首部
d1G 删除当前行至文档首部
dG 删除当前行至文档尾部
可视化模式下 v 的特殊操作
当操作的文本光标在 “”,‘’ ,(),{} ,[
(双引号,单引号,小括号,大括号,中括号)
当中的时候,可以通过 va"选中 ”“ 内的所有内容包括双引号 ,
vi" 选中 "" 内的所有内容,不包括 ""。
va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,
a 会选中结束符标志,i 就不会。
例子如下:
"hello world [VIM is so strong],{we all can master vim skill}"
假设当前光标定位在上面的文本 M 处:
va]
操作将会选中一下文本:
“hello world [VIM is so strong],{we all can master vim skill}“
vi]
操作将会选中如下的区域,没有包含 []:
“hello world [VIM is so strong],{we all can master vim skill}“
VIM 的宏录制
假设需要操作的文本如下,
需要将如下的多行文本的首行键入一个 tab
键。
hello
hello world
hello world , vim
宏录制的录制操作
先将光标移动到第一行,在普通模式下按下 q 键
(宏录制是 q 键启动的),在按一个 a (字母随意),表示该宏注册为 a ,
按下 I 在行首插入一个 tab 键,
按下jj
或者 <ESC>
退出编辑模式,按下 j 将光标移动到下一行行首,
最后按下 q 键完成录制操作(宏录制是 q 键结束的)。
总结上面例子的操作流程:
q → a → I → tab → jj → j → q
上面的例子成功地把在行首插入 tab
的功能录制了下来,那么如何应用到其他行呢?
宏录制的使用
上述的例子,在正常模式下,
按 @a
执行宏录制的一系列动作,
将会在第二行执行插入 tab 。
@@
是对上一次宏使用的重复操作。
n@a
就会执行 n 次一系列的动作。
使用宏录制可以一次执行一系列的操作,
可以针对一些重复度较高的操作进行宏录制。
精准查找
如果文本中有这三个单词
hello
helloworld
hellopython
那我使用 /hello ,这三个词都会匹配到。
有没有办法实现精准查找呢?你可以使用
/hello>
精准查找:匹配行首、行末
# hello位于行首
/^hello
# world位于行末
/world$
ddp 交换光标所在行和其下紧邻的一行。
以句为单位移动
( 移动到句首
) 移动到句尾
当在查看错误日志时,正常的步骤是,vim打开文件,然后使用 shift+g
再跳转到最后一行,这里有个更简单的操作可以在打开文件时立即跳到最后一行。只要在 vim 和 文件 中间加个 +
即可。
vim + you.log
举一反三,当你想打开文件立即跳转到指定行时,可以这样
# 打开文件并跳转到 20 行
vim you.log +20