0 Vim的操纵模式
Vim实际上可以看出一门语言, 其移动和读写有自己的模式, 了解这个思维实际上比掌握后续的命令更重要, 这里先给出其不同操作的操作模式:
- common mode
{count}{motion}{operator}
或{operator}{count}{motion}
count
: 执行次数motion
: 定位operator
: 执行的动作
这个操作模式是完成最基本的动作
例如:d5w
就表示删除往后的5个单词
其中{count}
可以省略, 也就是1,
{operator}{a|i}{text-object}
operator
: 同样是执行的动作{a|i}
:a
表示包括指定的文本对象包括空白字符,i
表示包括指定的文本对象不包括空白字符{text-object}
:w
: words
: sentenceb
|(
: ()包裹的内容B
|{
: {}包裹的内容"|'
: 被引号包裹的内容
例如:daw
删除后续包括空白字符的文本对象
- visual mode
{trigger visual mode}{motion}{operator}
与common mode的第一种操作模式类似, 只不过提前进入visual mode
- ex命令
:[range]command[options]
对指定范围的内容执行command
,options
不固定
例如::10,12d a
表示删除10-12行的内容搜索替换:
:[range]s/{pattern}/{substitute}/{flags}
range
: 范围s
: 就是具体的一个command
pattern
: 模式, 支持正则表达式substitute
:替换内容flags
:g
: 全局替换i
: 无视大小写c
: 替换前确认
1 打开/关闭
1.1 新标签页
在Vim中,可以使用tabnew
命令来创建一个新的标签页(tab page)。标签页类似于编辑器中的分页,允许你在同一个Vim实例中同时打开多个文件,并在它们之间进行切换。以下是如何使用tabnew
命令的一些示例:
打开一个新的空白标签页:
1
:tabnew
这将创建一个新的空白标签页,你可以在其中开始编辑新的文件。
打开一个特定的文件在新的标签页中:
1
:tabnew filename
这将在一个新的标签页中打开名为”filename”的文件。可以替换”filename”为你想要打开的实际文件的路径。
在不同的标签页之间切换:
- 切换到下一个标签页:按下
gt
键。 - 切换到上一个标签页:按下
gT
键。 - 可以按下
{N}gt
,其中{N}
是标签页的序号。例如,如果要切换到第三个标签页,可以按下3gt
。
- 切换到下一个标签页:按下
关闭当前的标签页:
:tabclose
: 将关闭当前的标签页,并且如果标签页中有未保存的更改,Vim会提示你保存它们。查看所有的标签页:
:tabs
: 这将显示所有打开的标签页,并且会在当前标签页前面标记一个”%”。使用
:tabnext
和:tabprev
命令:
使用:tabnext
和:tabprev
命令来切换到下一个或上一个标签页::tabnext
: 切换到下一个标签页:tabprev
: 要切换到上一个标签页
退出当前标签页
:q
: 退出当前标签页:qa
: 退出所有标签页tabo
: 退出其他标签页
打开或新建文件
:edit {relative-path-to-file}
1.2 split分割页
- 新建分割页
:sp {relative-path-to-file}
: 水平分页:vsp {relative-path-to-file}
: 垂直分页 - 当前分隔页的副本
<CTRL-W> S
水平方向<CTRL-W> V
t垂直方向
1.3 文件IO
:w
保存文件:wq
保存文件并退出:q!
强制退出
2 基本字符和单词操作
2.1 基本定位操作
j
、k
、h
、l
:这些是光标移动操作。j
:向下移动一行。k
:向上移动一行。h
:向左移动一个字符。l
:向右移动一个字符。
w
向前移动一个单词。按下w
键会将光标移动到下一个单词的开头。b
向后移动一个单词。按下b
键会将光标移动到前一个单词的开头。e
移动到单词的末尾。按下e
键会将光标移动到当前单词的末尾。0
移动到行的开头。按下0
键会将光标移动到当前行的开头。$
移动到行的末尾。按下$
键会将光标移动到当前行的末尾。^
移动到行的第一个非空字符。按下^
键会将光标移动到当前行的第一个非空字符处。Ctrl-d
向下滚动半屏。按下Ctrl-d
键会将屏幕内容向下滚动半个屏幕。Ctrl-u
向上滚动半屏。按下Ctrl-u
键会将屏幕内容向上滚动半个屏幕。G
移动到文件的最后一行。按下G
键会将光标移动到文件的最后一行。gg
移动到文件的第一行。按下gg
键会将光标移动到文件的第一行。L
将光标移动到屏幕的底部行。M
将光标移动到屏幕的中间行。H
将光标移动到屏幕的顶部行。
2.2 组合定位
在Vim中,f
、F
、t
和T
是用于在当前行内搜索字符的命令,结合它们可以实现各种组合操作。以下是这些命令的详细解释
f{char}
:在当前行内查找下一个出现的字符{char}
,光标会停在找到的字符上。例如,如果你想查找下一个出现的字母a
,可以按下fa
。F{char}
:在当前行内查找上一个出现的字符{char}
,光标会停在找到的字符上。例如,如果你想查找上一个出现的字母a
,可以按下Fa
。t{char}
:在当前行内查找下一个出现的字符{char}
,光标会停在找到的字符前一个位置。例如,如果你想查找下一个出现的字母a
,可以按下ta
。T{char}
:在当前行内查找上一个出现的字符{char}
,光标会停在找到的字符前一个位置。例如,如果你想查找上一个出现的字母a
,可以按下Ta
。
这些命令通常与其他操作一起使用,以便在文本中快速导航和编辑。例如,如果你想删除从光标位置到下一个出现字母a
的字符之间的文本,你可以使用dt{char}
,其中{char}
是你想要删除的字符。这些命令的组合允许你在Vim中以精确的方式执行各种文本编辑任务。
重点: 如何连续进行重复的定位操作?
答案: 使用;
和,
:
;
: 重复到下一个定位的位置, 例如使用fa
后跳转到了往后第一个a
出现的位置, 在使用;
可以到第二个a
出现的位置, 以此类推,
:;
的反向操作
3 插入与删除
3.1 基本插入
i
:进入插入模式。按下i
键会使光标位于当前位置,你可以在光标前插入文本。I
:进入插入模式并移到行首。按下I
键会将光标移到当前行的第一个非空字符位置,然后你可以开始插入文本。a
:进入插入模式并移到光标后面。按下a
键会使光标位于当前位置的下一个字符后面,你可以在光标后插入文本。A
:进入插入模式并移到行尾。按下A
键会将光标移到当前行的末尾,你可以在行尾插入文本。o
:在下面插入新行并进入插入模式。按下o
键会在当前行的下面插入一个新的空行,并将光标移动到新行的起始位置,你可以在新行中插入文本。O
:在上面插入新行并进入插入模式。按下O
键会在当前行的上面插入一个新的空行,并将光标移动到新行的起始位置,你可以在新行中插入文本。
这些命令允许你在插入模式中灵活地编辑文本。你可以使用它们来快速插入、编辑和调整文本,提高编辑效率。要退出插入模式并返回正常模式,只需按下Esc
键。
3.2 基本删除
x
:删除光标下的字符。按下x
键会删除光标所在位置的字符。X
:删除光标前面的字符。按下X
键会删除光标前一个位置的字符。dd
:删除当前行。按下dd
键会删除光标所在行的所有内容,并将其剪切到剪贴板。D
:删除从光标位置到行尾的内容。按下D
键会删除从光标位置到行尾的所有字符。dw
:删除从光标位置到下一个单词的开头。按下dw
键会删除从光标位置到下一个单词的开头的所有字符。de
:de命令将删除光标位置到当前单词的末尾的文本,包括当前单词的最后一个字符。这个命令通常用于删除一个单词的内容。db
:删除从光标位置到前一个单词的开头。按下db
键会删除从光标位置到前一个单词的开头的所有字符。:n1,n2d
:删除从行号n1
到行号n2
的所有行。例如,:1,5d
会删除第1行到第5行的所有行。:d{n}
:删除第n
行。例如,:d10
会删除第10行。dG
:删除从光标位置到文件末尾的所有行。dgg
:删除从光标位置到文件开头的所有行。:1,$d
:删除整个文件的内容。
这些是一些基本的删除命令,它们可以帮助你在Vim中快速删除文本。请注意,删除的文本通常会被复制到剪贴板,因此可以使用粘贴命令(如p
)将其恢复到其他位置。如果你需要撤销删除操作,可以使用撤销命令(如u
)来撤销最后的编辑操作。
3.3 基本替换
在Vim中,替换命令是用于替换文本的关键操作之一。c
命令(”change”)是用于删除并进入插入模式的命令,通常与其他操作一起使用来替换文本。以下是基本的替换命令以及与c
命令相关的一些衍生命令和组合:
c{motion}
:使用c
命令可以替换{motion}
范围内的文本。例如:cw
:替换当前单词。c2w
:替换下两个单词。c$
:替换光标位置到行尾的文本。
cc
:替换整行。按下cc
键会删除当前行并进入插入模式,允许你替换整行文本。C
:替换从光标位置到行尾的文本。按下C
键会删除从光标位置到行尾的文本并进入插入模式。s
:替换当前字符。按下s
键会删除光标下的字符并进入插入模式,允许你替换当前字符。S
:替换整行。按下S
键会删除整行并进入插入模式,允许你替换整行文本。r{char}
:这是一个简单的字符替换命令。按下r
键后,再紧跟一个字符{char}
,会将光标下的当前字符替换为指定的字符。例如,如果你想将当前字符替换为x
,只需按下rx
。替换完成后,光标会自动移动到下一个字符。这是一个快速替换单个字符的方式。R
:这是替换模式命令。按下R
键后,会进入替换模式,此时你可以连续输入字符,替换光标所在位置及其后续字符。替换模式允许你在一段文本中进行逐字符替换,直到你按下Esc
键退出替换模式。这对于逐字符编辑文本非常有用。:s/{pattern}/{replacement}/g
:使用替换命令来替换所有匹配{pattern}
的文本。例如,:s/old/new/g
会将所有匹配old
的文本替换为new
。:s/{pattern}/{replacement}/gc
:与上述命令类似,但会在替换前要求确认。你可以选择是否替换每个匹配项。:%s/{pattern}/{replacement}/g
:在整个文件中替换所有匹配{pattern}
的文本。注意,正则表达式中的特殊字符需要使用\
转义。
3.4 复制和粘贴
y
复制当前字符yy
负责一整行yw
复制一个单词y2w
复制2个单词p
粘贴
4 查找内容和替换
4.1 查找
- 查找指定内容
- 向后查找内容 n 查找下一个
1
/*** search for content***
N 查找上一个1
2- 向前查找内容
?*** search for content***
- 辅助查找指令
c-G
查看当前位置信息*G
向前查找内容
4.2 查找并替换
:s/{{old}}/{{new}}
用new替换old,普通替换, 替换范围为当前行的第一个:s/{{old}}/{{new}}
用new替换old,普通替换, 替换范围为当前行的所有:%s/{{old}}/{{new}}/g
用new替换old,普通替换, 替换范围为所有文档范围:%s/{{old}}/{{new}}/gc
用new替换old,普通替换, 替换范围为所有文档范围, 并在每一次替换时进行确认:{{#}},{{#}}s/old/new/g
#
指定了替换操的行范围
范围除了数字外还包括:
$
: 将光标移到文件的最后一行,
0
: 将光标移到文件的第一行
%
: 整个文件
'<,'>
:visual mode
下选择的内容
5 组合操作
5.1 跳转组合命令
c-o
返回上一个位置c-i
重新跳转到某位置
5.2 基本命令组合
1 | 10j 向下移动10次 |
5.3 括号组合操作
对于常见的括号包括 [], {}, (), <>, “”, ‘’
以{}为例:
1 | `ci{` 删除{}内的内容并进入编辑模式 |
6 Visual mode 操作
v
进入模式V
选择整行~
:反转大小写
7 其他操作
7.1 导入其他文件内容
1 | :r filename |
将导入 filename 指定文件的内容
7.2 配置项设置
:set nu
显示行号:set nonu
取消显示行号:set ic
输入时忽略大小写:set noic
取消输入时忽略大小写:set hls is
高亮匹配查找的内容:nohlsearch
取消高亮匹配查找的内容:set nocp
确保vim没有在兼容模式
7.3 执行命令行命令
1 | :! command |
执行command
操作
以下是几个特殊的指令@:
: 重复上一个指令@@
: 继续重复