VIM学习笔记

最近发现自己掌握的VIM技巧还不够,回顾了一下,记录如下:

移动

b 向前移动一个单词
W 移动到空格后的文字
B 移动到空格前的文字
^ 移动到行首(不包括空格)
G 移动到文件尾
} 向下段落移动
{ 向上段落移动
f + 字符 移动到改行下一个匹配到该字符的位置
F + 字符 移动到改行上一个匹配到该字符的位置
t + 字符 移动到改行下一个匹配到该字符的前一个字符的位置
T + 字符 移动到改行上一个匹配到该字符的前一个字符的位置
ctrl-f 下一页 f 就是forword
ctrl-b 上一页 b 就是backward
ctrl-d 向后滚动半屏
M 移动到屏幕中间的位置
H 移动到屏幕顶部
L 移动到底部
gj 与j不同在段落中下移一行,而不是下一道下一个段落。

编辑

db 删除前一个单词
cw 删除单词并进入插入模式
cc 删除整行并进入插入模式
ct+字符 删除光标所在位置到字符之间的所有字符
ci” 删除前后双引号之间的字符(花括号等也可以这样使用)
ca” 同上,双引号也会删除
viw 选中一个单词
vaw 选中一个单词和该单词后面的一个空格
diw 删除一个单词
daw 删除一个单词和该单词后面的一个空格
vip 选中整段
vap 选中整段和该段后面一个换行
gUis 使当前句子中的文字变为大写
das 删除当前句子
vit 选中Tag中的文字,如<\p>What’s up?</\p>
vat 选中Tag中的文字和Tag本身
cit 选中Tag中的文字,并修改
vi(/) 选中括号中的内容,同vib
va(/) 选中括号和括号中的内容,同vab
viB 选中一个大嵌套结构

剪切、拷贝、粘贴

P 粘贴文字(会从当前光标的前一个位置开始粘贴)
yw 复制单词
y0 拷贝光标位置至行首的字符

搜索

/\c 搜索的时候忽略大小写
/\n\n发现空行
:set ignorecase 搜索忽略大小写
N 前一个搜索到的字符
:set incsearch 输入字符的时候即刻搜索
:set hlsearch 开启高亮显示
:nohlsearch 去掉高亮显示
:noh 去掉高亮显示(简写)
. 重复上一个命令
* 移动到光标所在单词的下一个同一个单词处
# 移动到光标所在单词的上一个同一个单词处
% 选择对应匹配的Tag

替换

:s/Ember/Amber 将当前行单词Ember替换成Amber
:%s/Ember/Amber 将第一个匹配到的Ember替换成Amber
:%s/Ember/Amber/g 全局替换

局部替换:以下过程修改某函数的内容
1.光标定位到花括号
2.按v进入visual模式 (V 可以进入Visual Line模式)
3.按%会将整个花括号的内容都选中
4.:’<,’>s/router/dispatchear/gc 替换内容,(这里c为Confirm,每个替换都需要确认.)

gv 选中上一次选择的区域

原格式:

<option value="AF">Afghanistan</option>
<option value="AI">dfsdf</option>
<option value="AZ">Afghaniadsfstan</option>
<option value="BS">sdf</option>

目标格式:

Afghanistan
dfsdf
Afghaniadsfstan
sdf

步骤:

1.光标放在第一行第一个’<’的位置
2.qa 开始录制宏,宏名为a
3.df> 删除第一个’<’到第一个’>’的所有字符
4.f< 移动到后面的一个’<’符号
5.d$ 删除’<’及以后的内容
6.j0 向下移动一行并移动至行首
7.q 宏录制完成
8.reg 查看宏
9.@a 运行名为a的宏
10.200@a 执行两百次

运行终端命令

:!date 在终端运行date命令
:read !date 从终端读取日期
:r !curl –silent https://raw.github.com/gist/xxxx 读取curl获取的内容

多窗口和标签

:e filepath 打开filepath文件
:b# 在打开的文件中切换
:vs 垂直分割窗口(可以直接加文件路径)
:sp 水平分割窗口
ctrl+wh/j/k/l 编辑上下左右的文件
:sb2 分割窗口并且打开第二个开启的文件
:q 关闭分割的窗口
:tabedit app/controller/xxx.sh 以标签页方式打开文件
gt 切换到后一个标签
gT 切换到前一个标签
:table filepath 打开一个文件

其他设置

set number 显示行号
syntax on 开启语法高亮
colorscheme desert 设置主题
set ft=javascript 设置文件格式为javascript
:<’,’>!coffee -c -s -p将文件内容变为coffe格式(visual模式)

缩进

>> 缩进一个Tab
set list 显示Tab(^)、回车($)等特殊字符。
set nolist 不显示以上字符
set expandtab 将Tab替换为空格。
set noexpandtab 取消用空格替换Tab。
set shiftwidth=3 按>>时缩进三个空格
V 行选择模式,可以同时选中多行进行缩进,在此模式中,按o和O可以在所选的区域中移动光标所在的顶点。
Ctrl+v 列选择模式,在此模式中,按o和O可以在所选的区域中移动光标所在的顶点。
set smartindent 设置自动缩进
set sts=3 设置缩进空格数
ctrl+t 向前缩进
ctrl+d 向后缩进

代码折叠

zs5j 折叠5行代码
zo 展开折叠的代码
zc 折叠代码
zd 删除折叠
zf% 折叠匹配行的代码,比如在花括号上执行该命令
set fdm=syntax 根据语法自动折叠代码
zC 折叠所有代码
ZO 打开所有折叠了的代码
set foldmarker=test,test 设置缩进代码为test

其他

:set ft? 查看文件类型
:so ~/.vimrc 重新加载配置文件
:set warp 设置换
:set linebreak 换号的时候不拆分单词
:set showbreak=>\ 将换行符显示为’> ‘
:set scrolloff=5 距离屏幕5行的时候停止scroll
:set undofile 设置undofile,该文件记录你所编辑的文件变化,在你保存编辑的文件再打开之后仍然可以undo。
:set gdefault 设置默认g标志,即s/this/THIS/g的时候不用打g
:set laststatus=2 设置始终显示状态行。
:set statusline=%f\ \ line:%l/%L\ col:%c\ %p%%\ %y

参考

如何让 vim 成为我们的神器

打赏支持:支付宝/微信,感谢赏口饭吃