这篇并不是Vim入门篇命令,只用来记录本人容易忘记的命令,入门者请另寻佳文。
1 替换命令
替换命令中的s即substitude,from和to可以为任何字符串,from还可以为正则表达式。
替换命令语法:
:[range]s/from/to/[flags]
range
的表达方式:
不写range # 默认光标所在行
. # 光标所在行
1 # 第一行
$ # 最后一行
n # 第n行,n为正整数
.+1 # 当前光标所在行的下一行
$-1 # 倒数第二行
n,m # 第n~m行,n和m为正整数且n<=m
% # 所有行
flags
的表达方式:
不写flag # 只对指定范围内的第一个匹配项进行替换
g # 对指定范围的所有匹配项进行替换
c # 在替换前请求用户确认
e # 忽略执行过程中的错误
# 各个flag可以组合使用
下面对某些常见情况下的替换命令进行总结:
- 替换当前行中的内容
:s/from/to/ # 将当前行第一个from替换成to,如果有多个from,只替换第一个 :s/from/to/g # 将当前行中的所有from都替换为to :s/from/to/gc # 将当前航中的所有from都替换成to,但每次替换都会询问用户确认此操作
- 替换某一行的内容
:.s/from/to/g # 将当前行中的所有from都替换为to,等同于:s/from/to/g :10s/from/to/g # 将第10行中的所有from都替换为to :$s/from/to/g # 将最后一行的所有from都替换为to
- 替换某些行的内容
:10,20s/from/to/g # 将第10行到第20行的所有from都替换为to :1,$s/from/to/g # 将第1行到最后一行的所有from都替换为to :1,.s/from/to/g # 将第1行到当前行的所有from都替换为to :.,$s/from/to/g # 将当前行到最后一行的所有from都替换为to
- 替换所有行的内容
:%s/from/to/g # 将文本中所有的from都替换为to,相当于:1,$s/from/to/g
2 NERD Commenter插件的注释快捷键
,cc # 注释当前行或visual mode所选区域
,cu # 取消注释
,c空格 # 注释和反注释(智能判断)
,ca # 切换注释方式,如C++的//和/* */
,cs # 以美化的方式注释多行
,cA # 在行尾加注释符并进入insert mode
n,cc # 注释当前行向下n行
n,cs # 以美化的方式注释当前行向下n行
3 分屏命令
- 启动vim时分屏
vim -On file1 file2 ... # 使用大写的O参数垂直分屏打开多个文件 vim -on file1 file2 ... # 使用小写的o参数水平分屏打开多个文件 # n为正整数,表示分成几个屏,可以省略,省略的情况默认按后面的文件数来决定分几个屏
- 启动vim后在Norm mode下分屏
:new或Ctrl+w,n # 新建文件并分屏(:new后可接文件名,不加的话最后:w时后面跟文件名也行) :split或Ctrl+w,s # 水平分屏 :vsplit或Ctrl+w,v # 垂直分屏
- 关闭分屏
:only或者Ctrl+w,o # 取消去她分屏,只保留当前分屏 Ctrl+w,c # 关闭当前分屏(Ctrl+w,q好像也是这样,暂时没有发现两者的区别)
- 切换分配
Ctrl+w,w # 切换到下一分屏 Ctrl+w,p # 切换到前一分屏 Ctrl+w,h # 向左切换分屏 Ctrl+w,j # 向下切换分屏 Ctrl+w,k # 向上切换分屏 Ctrl+w,l # 向右切换分屏
- 分屏并打开一个已存在文件
:vs path/filename # 在新的垂直分屏中打开文件 :sv path/filename # 在新的水平分屏中打开文件
- 移动分屏
Ctrl+w,H # 向左移动分屏 Ctrl+w,J # 向下移动分屏 Ctrl+w,K # 向上移动分屏 Ctrl+w,L # 向右移动分屏
4 分页命令
- 打开新分页并编辑新文件(可选的)。如果未指定文件,则只打开新分页,并附上空的缓冲区。
:tabnew filename
- 关闭当前分页
:tabclose
- 关闭其他所有的分页。如果其他分页中有修改过的文件,则不会移除该分页,除非设置了autowrite选项。此时,所有修改过的文件都在分页关闭前写入磁盘。
:tabonly
5 vim和系统之间复制粘贴
- vim copy到系统
"+y
。 - 系统copy到vim
"+p
。
6 MarkDown相关命令
- vim-markdown-toc插件生成目录相关命令
:GenTocMarked 在光标处生成目录 :UpdateToc 更新目录
- markdown-preview.vim插件打开浏览器中实时预览功能
:MarkdownPreview
7 代码折叠
zc 折叠代码
zo 展开代码
zC 对所有折叠点的代码折叠
zO 对所有折叠点的代码展开
8 vim-surround
普通模式
命令 | 说明 + 示例 | |
---|---|---|
ds | 删除括号 | |
例 | ds " | "Hello world!" =>Hello world! |
cs | 替换括号 | |
例 | cs "( | "Hello world!" =>(Hello world!) |
cS | 替换括号,括号内文本做新一行 | |
例 | cS "{ | "Hello world!" =>{ Hello world! } |
ys | 添加括号(配合vim光标移动) | |
例 | ys w [ | Hello world! =>[Hello] world! |
例 | ys w <em Enter | Hello world! =><em>Hello<em> world! |
yS | 添加括号,括号内文本做新一行 | |
例 | yS w [ | Hello world! =>[ Hello ] world! |
yss | 整行括起来 | |
例 | yss ( | Hello world! =>( Hello world! ) |
ySS | 整行括起来,括号内文本做新一行 | |
例 | ySS { | Hello world! =>{ Hello world! } |
例 | ySS <div Enter | Hello world! =><div> Hello world! <div> |
ySs | 与ySs功能相同 |
可视模式
命令 | 说明 + 示例 | |
---|---|---|
S | 选中的括起来 | |
例 | 选中world: S( | Hello world! =>Hello (world)! |
gS | 选中的括起来,括号内文本做新一行 | |
例 | 选中world: gS{ | Hello world! =>Hello { world }! |