vim使用总结
vim使用总结
参考链接:
一、两种模式及常用快捷键
1.1 标准模式及命令模式
光标移动
- 单位级光标移动:
h
向左一字符j
下一行k
上一行l
向右一字符
- 单词级光标移动:
w
orW
向右移动到下一单词开头(word)e
orE
向右移动到单词结尾(end)b
orB
向左移动到单词开头f+<char>
:移动到当前行中 [char] 的下一个出现位置F+<char>
:移动到当前行中 [char] 的上一个出现位置
- 块级光标移动:
^
:到第一个非空白字符$
:到行尾gg:到文档第一行0
:到行首(第 1 列){
:到上一个段落}
:到下一个段落gg
:到文档第一行G
:到文档最后一行:<N>
or<N>gg
or<N>G
跳转到第 N 行:+<N>
or<N>j
向下跳 N 行:-<N>
or<N>k
向上跳 N 行
- 翻页
Ctrl+u
:向上移动半页Ctrl+d
:向下移动半页Ctrl+b
:向上移动一整页Ctrl+f
:向下移动一整页
打开文件
- gf:文件内跳转到对应的文件(打开include文件时)
:e <filename>
打开名为 filename 的文件,若文件不存在则创建之:Ex
在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:-
进入上级目录)
文件buffer
:buffers
或:ls
:查看 buffer 列表(即打开文件的历史记录):bn
打开缓存中下一个文件:bp
打开缓存中上一个文件:b<N>
打开缓存中第 N 个文件:bdelete<N>
或:bd<N>
:删除要关闭的缓冲区(文件)
保存文件
:w
保存当前文件:q
关闭当前 buffer:wa
保存全部文件:wq
orZZ
保存并退出:q!
orZQ
强制退出,不保存:qa!
保存并推出全部 buffer:saveas <new filename>
文件另存为:w <new filename>
文件另存一份名为<new filename>
的副本并继续编辑原文件
查找
- 文件内查找
*
向后查找光标当前所在单词#
向前查找光标当前所在单词/<search>
向后查找指定字符串?<search>
向前查找指定字符串n
继续查找下一个,方向由之前查找的方向决定N
继续查找上一个,方向由之前查找的方向决定
- 行内查找
f<X>
当前行内向行尾方向查找并定位到字符X
t<X>
当前行内向行尾方向查找并定位到字符X
之前F<X>
当前行内向行首方向查找并定位到字符X
T<X>
当前行内向行首方向查找并定位到字符X
之后;
继续向当前方向查找下一个字符,
向当前相反方向查找下一个字符
- 匹配查找
- 当光标位于
(
和)
,[
和]
,{
和}
其中一个符号上时,按下%
,光标会跳到与之匹配的另外一个符号上。
- 当光标位于
1.2 插入模式
任一插入命令执行后均会进入插入模式,此时如需退出可以按ESC
、Ctrl-[
或Ctrl-C
插入
i
当前字符前插入a
当前字符后插入I
行首插入A
行尾插入o
在下一行插入O
在上一行插入
删除并保存到vim剪切板
s
删除当前字符,并进入INSERT
模式S
删除当前行并保存到 Vim 剪贴板,同时进入INSERT
模式(等同于cc
)x
删除当前字符,相当于 insert 模式下的Delete
X
删除前一个字符,相当于 insert 模式下的Backspace
dd
删除当前行,并将删除的内容保存到 Vim 剪贴板d3d
or3dd
删除后 3 行并保存到 Vim 剪贴板d<X>
删除指定内容并保存到 Vim 剪贴板cc
删除当前行并保存到 Vim 剪贴板,同时进入INSERT
模式c<X>
删除指定内容并保存到 Vim 剪贴板,同时进入INSERT
模式cw
从光标前删除到当前单词的结尾并进入INSERT
模式ciw
删除当前光标所在的整个单词并进入INSERT
模式c$
从光标前删除到行尾并进入INSERT
模式
<X>
部分是对操作内容的描述,如果要删除一个单词,就输入dw
或者de
,要复制当前位置到行尾的内容,就输入y$
,要删除后面 3 个字符并插入,就输入c3l
诸如此类
复制
yy
复制当前行到 Vim 剪贴板y<X>
复制指定内容到 Vim 剪贴板
粘贴
p
在当前位置后粘贴P
在当前位置前粘贴
合并
J
将当前行与下一行合并
替换
-
r<X>
将当前字符替换为 X -
gu<X>
将指定的文本转换为小写 -
gU<X>
将指定的文本转换为大写 -
:s/<search>/<replace>/g
查找当前行中所有 search 内容并替换为 replace 内容g
代表 global ,全局替换,否则为替换光标后的第一个c
代表需要确认是否替换i
代表不区分大小写I
代表区分大小写
-
:%s/<search>/<replace>/g
查找所有行中所有 search 内容并替换为 replace 内容 -
:5,12s/<search>/<replace>/g
查找5~12行中所有 search 内容并替换为 replace 内容 -
:.,%s/<search>/<replace>/g
查找当前行到最后一行中所有 search 内容并替换为 replace 内容 -
:.,+2s/<search>/<replace>/g
查找当前行到后2行中所有 search 内容并替换为 replace 内容 -
:g/^baz/s/<search>/<replace>/g
查找所有以baz开头的行中所有 search 内容并替换为 replace 内容
撤销、重做
u
撤销Ctrl-r
重做
二、技巧
2.1 常用设置
临时生效方法:
:set number
显示行号:set showcmd
显示完整命令:set relativenumber
显示相对行号(这个非常重要,慢慢体会):set hlsearch
搜索结果高亮- 如果想清除高亮,只需要搜索一个不存在的结果即可
:set autoindent
自动缩进:set smartindent
智能缩进:set tabstop=4
设置 tab 制表符所占宽度为 4:set softtabstop=4
设置按tab
时缩进的宽度为 4:set shiftwidth=4
设置自动缩进宽度为 4:set expandtab
缩进时将 tab 制表符转换为空格:filetype on
开启文件类型检测:syntax on
开启语法高亮
永久生效方法:
修改文件 /home/<user>/.vimrc
(Linux 系统)或 /Users/<user>/.vimrc
(Mac OS 系统)为:
1 | set number " 显示行号 |
2.2 重复上一次的命令
- .:重复上次修改(一次修改的单位可以是字符、整行、甚至是整个文件,不包括光标移动)
2.3 缩进
>>
向右缩进当前行<<
向左缩进当前行3>>
:后三行向右缩进>G
:增加当前行到文档末尾处所有行的缩进层级<G
:减小当前行到文档末尾处所有行的缩进层级- 再可视行模式(正常模式下按
V
)下输入>
向右缩进当前行<
向左缩进当前行
2.4 自动排版
==
自动排版当前行gg=G
当前文档全文自动排版<N>==
对从当前行开始的 N 行进行自动排版=<N>j
对当前行以及向下 N 行进行自动排版=<N>k
对当前行以及向上 N 行进行自动排版
三、分屏与标签页
3.1 分屏
-
:split
缩写:sp
orCtrl-w s
上下分屏(此时是同文件分屏):sp xx
上下分屏打开 xx 文件
-
:vsplit
缩写:vs
orCtrl-w v
左右分屏(此时是同文件分屏):vs xx
左右分屏打开 xx 文件
-
:diffsplit
缩写:diffs
diff 模式打开一个分屏,后面可以加上 {filename} -
:close!
orCtrl-w c
关闭当前分屏
窗口跳转
Ctrl-w w
激活下一个窗口Ctrl-w j
激活下方窗口Ctrl-w k
激活上方窗口Ctrl-w h
激活左侧窗口Ctrl-w l
激活右侧窗口
移动分屏
Ctrl-w L
移动到最右侧Ctrl-w H
移动到最左侧Ctrl-w K
移动到顶部Ctrl-w J
移动到底部
屏幕缩放
Ctrl-w =
平均窗口尺寸Ctrl-w +
增加高度Ctrl-w -
缩减高度Ctrl-w _
最大高度Ctrl-w >
增加宽度Ctrl-w <
缩减宽度Ctrl-w |
最大宽度
3.2 标签页
创建
:tabnew
or:tabedit
缩写:tabe
打开新标签页Ctrl-w gf
在新标签页中打开当前光标所在位置的文件名
:tabnew
和:tabedit
后面都可以跟一个 <空格><文件名> 用以在新标签页中 打开指定文件,还可以在:
后面加一个数字,指出新标签页在列表中的位置(从 0 开始)
切换
gt
or:tabnext
缩写:tabn
下一个标签页(最后一个会循环到第一个)gT
or:tabprevious
缩写:tabp
上一个标签页(第一个会循环到最后一个):tabrewind
缩写:tabr
or:tabfirst
缩写:tabfir
到第一个:tablast
缩写:tabl
到最后一个标签页
关闭
:tabclose
缩写:tabc
关闭当前标签页:-tabc
关闭上一个标签页:+tabc
关闭下一个标签页:tabonly
缩写:tabo
关闭其他标签页