前言
- vim语法高亮
1 | vim ~/.vimrc |
2 | |
3 | // 然后在文件中添加如下代码 |
4 | syntax on |
5 | colorscheme darkblue |
1. 插入文本
- Normal模式与Insert模式
- Normal模式:键入的每个自负都被视为一个命令
- Insert模式:键入的自负作为实际要输入的文本内容,使用
i
命令(insert)
- Normal模式与Insert模式
- 现在是什么模式?
- 打开显示模式:
:set showmode
- 关闭显示模式:
:set noshowmode
- 打开显示模式:
- 现在是什么模式?
- 模式之灾
- 使用Vim经常忘记自己身在何种模式,或者不经意敲了那个字符就切换到别的模式去了,按再次
Esc
,如果Vim以一声蜂鸣来回答你,那说明你已经是在Normal
模式了。
- 使用Vim经常忘记自己身在何种模式,或者不经意敲了那个字符就切换到别的模式去了,按再次
- 模式之灾
- 移动光标
- 移动光标命令
1
K 上
2
h 左 l 右
3
j 下
- 也可以用箭头键来移动光标,会大大的降低效率,想象一下要是一下你在一小时内这样的做一百次会占用你多少时间?在编辑器中移动光标是十分常用的操作,这些字符在键盘上都分布在你右手周围,精心挑选的。
- 移动光标命令
- 移动光标
- 删除字符
- 删除一个字符命令:
x
- 这是在追忆古老的打字机的时代,在打字机上删除字符就是用xxxx来覆盖它的。
- 删除一个字符命令:
- 删除一行命令:
dd
- 删除后下边的行会移上来填补空缺。
- 删除一行命令:
- 删除换行符命令:
J
- 把两行合并为一行,也就是说两行之间的换行符被删除了。
- 删除换行符命令:
- 删除字符
- 撤销和重做
- 撤销命令:
u
(undo)- 如果误删除了过多的内容,命令
u
更简便,它可以撤销上一次的操作。 - 撤销命令还有另一种形式,
U
命令,它一次撤销对一行的全部操作,即打开文件时的状态。
- 如果误删除了过多的内容,命令
- 撤销命令:
- 重做命令:
ctrl + r
(repeat)- 如果你撤销了多次,可以用
ctrl + r
来反转撤销的动作,换句话说它是对撤销的撤销。
- 如果你撤销了多次,可以用
- 重做命令:
- 其他编辑命令
- 追加
- 在光标之后插入文本命令:
a
(append) - 另起一行命令:
o/O
o
命令可以在当前行的下边另起一行,并使当前模式反转为Insert模式,而大写的O
,是在当前行的上边另起一行。
- 使用命令计数
- 指定的数字要紧挨在它所有修饰的命令前边。
- 假设你要向上移动9行,这可以用
kkkkkkkkk
或者9K
来完成。 - 行尾追加三个感叹号,可以用
a!!!
,另一个办法是3a! <Esc>
命令。 - 删除3个字符可以用
3x
- 退出
- 放弃编辑命令:
q!
- 有时你会在做了一连串的修改之后突然意识到最好是放弃所有的修改重新来过,这个命令由3个部分组成:冒号
,
,用以进入冒号命令行模式:q
命令,告诉编辑器退出;最后是强制命令行的修饰符(!)
- 有时你会在做了一连串的修改之后突然意识到最好是放弃所有的修改重新来过,这个命令由3个部分组成:冒号
- 放弃所有修改后还想以该文件的初始内容作为开始继续编辑:
e!
(edit) - 保存并退出命令:
ZZ
或者:wq
(write quit)
- 其他编辑命令
- 撤销和重做
2. 帮助文档
你想做的任何操作都可以在vim的帮助文文件中找到答案,所以不用怕问问题。
- 打开帮助命令:
:help
或者F1
- 打开帮助命令:
- 打开用户手册的目录:
:help usr_toc.txt
- 打开用户手册的目录:
- 常用的帮助命令的使用
- 查看关于某个特殊主题的帮助:
:help {subject}
:help x
关于x命令的帮助
:help deleting
关于如何删除的内容
:helo index
所有vim命令的索引
- 查看关于某个特殊主题的帮助:
- 关于某个控制字符的帮助:
CTRL-{subject}
:help CTRL-A
- 关于某个控制字符的帮助:
- 查找其他模式下的帮助
:help i_CTRL-H
insert模式
:help v_CTRL-B
Visusl模式
:help c_CTRL-B
Command模式
- 查找其他模式下的帮助
- 关于命令行选项:
-{subject}
:help -R
vim -R file.txt 以只读模式打开文件
- 关于命令行选项:
- 关于命令行选项的说明:
showmode
:help 'showmode'
- 关于命令行选项的说明:
- 特殊键用尖括号中的简单的描述性名字表示
:help i_<Up>
- 特殊键用尖括号中的简单的描述性名字表示
- 错误ID号的作为帮助的主题
:help {错误ID}
- 错误ID号的作为帮助的主题
- 关于函数
subject
的帮助:help add()
在vimscript中使用
- 关于函数
- 关于编译时特性
+subject
的帮助:help +visual
- 关于编译时特性
- 查找一个以
pattern
开始的帮助标记,重复按Tab
查看其他匹配的帮助标记:help pattern<Tab>
- 查找一个以
- 同时列出匹配
pattern
的所有可能的帮助主题:help pattern<Ctrl-d>
- 同时列出匹配
- 在所有帮助文档中搜索全部文本查找指定的pattern
:helpgrep pattern
:copen
打开快速列表 直接回车键进入编辑
:cclose
关闭快速列表
:cn
下一匹配
:cprev 或者 :cN
前一个匹配
:cfirst
第一个匹配
:clast
最后一个匹配
- 在所有帮助文档中搜索全部文本查找指定的pattern
- 常用的帮助命令的使用
3. 移动
要想把vim玩得好,移动是必备的技能点。
- 以word为单位的移动
w
命令(word):光标向前移动一个word,光标会移动到下一个word的首字符上,同时可以加计数前缀,如3w
,将光标向前移动3个word。b
命令(backward):光标向后移动到前一个word的首字符上,同时可以加计数前缀,如3b
,将光标向后移动3个word。e
命令(end of word):光标向前移动到下一个word的最后一个字符上。ge
命令:光标向后移动到前一个word的最后一个字符上。- 以上命令如果遇到连字符
/ - _ . 、(
等等,按下大写的命令即可。 - 混合使用这几种不同的大小写命令,可以让你更快的在文本前后移动。
- 以上命令如果遇到连字符
- 以word为单位的移动
- 移动到行首或行尾
$
命令:光标移动到当前行行尾,与End
键作用相同,可以接受计数命令,如2$
表示下一行的行尾。^
命令:光标移动到当前行第一个非空的字符上。0
命令:光标移动到当前行第一个字符上,与Home
键作用相同。
- 移动到行首或行尾
- 移动到指定的字符上
f
命令(find):向后单字符搜索命令,如fx
在当前行查找下一个字符x,同时也可以使用计数命令,如3fx
。F
命令:向左单字符搜索命令。t
命令(to):向右单字符搜索命令,只不过不是把光标停留在被搜索字符上,而是它之前的一个字符上。T
命令:向左单字符搜索命令。- 可以同时与
;
键来重复使用这些命令。
- 可以同时与
- 移动到指定的字符上
- 以匹配一个括号为目的移动
%
命令:光标跳转到与当前光标相匹配的括号上,括号:() [] {}- 如果当前光标没有停留在一个可用的括号字符上,会向前找到第一个括号,与之匹配。
- 以匹配一个括号为目的移动
- 移动到指定行
G
命令(go):光标定位到计数指定的行,如果没有指定计数,光标会定位到最后一行。gg
命令:定位到第一行与1G
的效果相同。%
命令:光标定位到计数指定的行上,如50%
,90%
等。
- 移动到指定行
- 告诉你当前的位置
Ctrl-g
命令:显示信息行,如行号,总行数,以及当前行在文件中的百分比。set number
命令:显示行号。set nonumber
命令:关闭显示行号。set ruler
命令:显示当前光标的位置。set noruler
命令:关闭显示当前光标的位置。
- 告诉你当前的位置
- 滚屏
Ctrl-u
命令(up):文本向下滚动半屏,窗口向上滚动半屏。Ctrl-d
命令(down):文本向上滚动半屏,窗口向下滚动半屏。Ctrl-e
命令(extra):文本向上滚动一行,窗口向下滚动一行。Ctrl-y
命令:文本向下滚动一行,窗口向上滚动一行。Ctrl-f
命令(forward):文本向下滚动一屏,窗口向上滚动一屏。Ctrl-b
命令(backward):文本向上滚动一屏,窗口向下滚动一屏。zz
命令:当前行置于正中央。zt
命令(top):当前行置于屏幕顶端。zb
命令(bottom):当前行置于屏幕底端。
- 滚屏
- 简单搜索
- 常用命令
/{string}
命令:向下搜索一个字符串。?{string}
命令:向上搜索一个字符串。n
命令:下一次搜索,可以加计数命令。N
命令:上一次搜索,可以加计数命令。. * ^ ~ $
有特殊的意义,需要一个反斜杠\
。
- 常用命令
- 大小写问题
:set ignorecase
:开启搜索忽略大小写。:set noignorecase
:关闭搜索忽略大小写。
- 大小写问题
- 命令历史记录
- 按下
/
来搜索,先别按回车键,上箭头键会显示你上一次进行搜索的命令。
- 按下
- 命令历史记录
- 在文本中查找下一个word
*
命令:向下搜索下一个当前光标所在的单词。#
命令:向上搜索下一个当前光标所在的单词。- 默认以
\<{word}\>
,完整的单词搜索。
- 默认以
- 在文本中查找下一个word
- 查找整个word
\>
:单词结束符。\<
:单词开始符。\<{word}\>
:完整的单词搜索。
- 查找整个word
- 高亮显示搜索结果
:set hlsearch
命令(highlight search): 开启高亮显示搜索结果。:set nohlsearch
命令: 关闭高亮显示搜索结果。nohlsearch
:去掉当前的高亮显示
- 高亮显示搜索结果
- 调整搜索
:set incsearch
:开启使用键入莫表字符串同时就开始搜索。:set noincsearch
:关闭使用键入莫表字符串同时就开始搜索。set warpscan
:开启到达文件的尾部会向另一个方向进行搜索。set nowarpscan
:关闭到达文件的尾部会向另一个方向进行搜索。
- 调整搜索
- 简单搜索
4. 简单的搜索模式
vim使用正则表达式进行搜索的功能十分的强大。
- 一行的开头与结尾
^
字符:匹配一行的开头。- $字符:匹配一行的结尾。
- 一行的开头与结尾
- 匹配任何一个字符
.
字符:匹配任何一个字符。- 备注:如果是特殊字符,需要反斜杠。
- 匹配任何一个字符
5. 使用标记
- 常用命令
- ``命令:当使用
G
命令进行跳转时,回到原来的跳转位置。- 跳转:包括G / 与n等搜索命令,但不包括fx或者tx,以及word为单位的移动命令,或者光标的移动均不包括。
Ctrl-o
命令(old):跳转到前一个光标停留的位置。Ctrl-i
命令:跳转到下一个光标停留的为位置,与Tab
键作用功能相同。jumps
命令:显示你曾经跳转过的位置。
- ``命令:当使用
- 常用命令
- 具体的命令的标记命令
m
命令(mark):定义一个标记,如ms
,名为s(start)的标记。,
命令:跳转到某个名字的标记。如s
。:mark
:查看所有的标记。- 特殊的标记
- `:进行此次跳转之前的跳点。
''
到上次跳转的位置。[
最后一次修改的起始位置。
- 具体的命令的标记命令
6. 小幅改动
- 操作符命令和位移
dw
命令(delete word):删除一个word,w可以看作一个word,也可以看作右移了一个word。d4w
命令:删除4个word,4w看作一次右移4个word。d2e
命令:删除2个word,光标移动到第二个word的尾部。d$
命令:删除光标到行尾。
- 操作符命令和位移
- 改变文本
- 常用命令
cw
命令(change word):改变命令,与d
命令类似,执行完成之后会进入Insert模式,意为改变一个word。cc
命令:改变整行,保持原有的缩进。set all
:查看vim所有的一些基础配置。set cindent
:开启缩进。set nocindent
:关闭缩进。
c$
命令:删除到行尾的内容,等于d$a
。
- 常用命令
- 快捷命令
x
=dl
X
=dh
D
=d$
C
=c$
s
=cl
S
=cc
- 快捷命令
- 命令计数放在哪里?
3dw
、d3w
、3d2w
,这些有什么区别呢?- 第一个数字是计数命令,代表命令的重复次数。
- 第二个数字是位移命令,代表作用的范围。
- 命令计数放在哪里?
- 替换单个字符
r
命令(replace):替换单个字符,你也可以使用s
或者cl
命令来完成相同的功能,但使用r
命令不需要再按Esc
键回到Normal模式。- 备注:
r
命令同样可以使用数字计数,如5rx
等操作。
- 备注:
- 替换单个字符
- 重复改动
.
命令:重复上一次做出的修改。- 如删除Html语言。
.
命令重复的是修改命令,而不是被改动的内容。- 使用
.
命令来替换。
- 重复改动
- Visual模式
- 选择文本范围
v
命令:进入visual模式,移动光标覆盖你想操作的文本范围,最后键入操作符。
- 选择多行
vjj
命令:选择3行,可以选择多行。
- 选择文本块
Ctrl-v
:进入visual块模式,以文本块为对象进行操作,常常用来编辑表格。
- 文本块操作
o
命令(other end):会让光标置于被选中的文本的另一端,对角的位置上去,可以通过光标移动进行行块的所选范围进行移动。O
命令:同一行左右两个角之间进行移动。- 备注:在visual块模式下,进行操作。
- 移动文本
p
命令(put):以前通过用d
或x
进行删除的文本都可以用p
命令进行读取。- 如:
dd
删除行后,将光标移动到想要放入的地方然后p
命令进行放入。 - 如:移动某个单词,
dw
删除后,将光标移动到想要放入的地方然后使用p
命令进行放入。 - 如:交换两个字符,
x
删除字符,用p
命令取回。
- 如:
P
命令:把取回的内容放在光标之前。- 备注:可以与计数命令一起使用,如:
dd
删除行之后,3p
会将删除的行取回三次放在当前的位置。
- 备注:可以与计数命令一起使用,如:
- 复制文本
y
命令(yanking): 将文本复制到一个寄存器中,用p
命令取回。- 备注:
- 和
d
命令类型。 yw
:复制一个word。y2w
:复制两个word。yy
:复制一行。y$
:复制光标到行尾,D
或d$
(删除光标到行尾的内容)类似。Y
:与yy
类似,复制一整行,规律是存在例外的。
- 和
- 备注:
- 使用剪贴板
*yy
命令:将一行内容复制到剪贴板中。*p
命令:把剪贴板中的内容复制出来。- 备至:只适用于gvim,实质上是将内容复制到名为*的寄存器中。
- 文本对象
daw
命令(delete a word):删除一个单词,光标位于单词的中间而你要删除这个单词时使用的。diw
命令(delete inner word):删除一个单词,不删除之后的空格符。cas
命令(change a sentence):要修改一整个句子,删除之后的空格符,由Normal模式转到Insert模式。cis
命令(change inner sentence):要修改一整个句子,不会删除之后的空格符。
- 替换模式
R
命令:键入的字符都会替换当前光标下的字符,键入Esc
结束该模式。Insert
键可以在Insert模式与Replace模式之间进行切换,Backspace
键可以将原来的字符进行修复。
- 总结
- 操作命令,位移命令和文本对象可以让你在使用这些命令时任意组合,如在使用操作符命令
N
配上位移命令M
来构成一个NM
命令。
- 操作命令,位移命令和文本对象可以让你在使用这些命令时任意组合,如在使用操作符命令
- 操作命令:
d
、c
、y
、p
- 操作命令:
- 位移命令:
w
、O
、^
、$
- 位移命令:
- 文本对象:
aw
、as
、iw
、is
- 文本对象:
- 删除文本常用的方法:
x
:删除当前光标下的字符,与dl
功能是一样。
X
:删除当前光标之前的字符,与dh
功能一样。
D
:删除当前光标到行尾的内容,与d$
功能一样。
dw
:删除自当前光标到下一个word的开头。
db
:删除自当前光标到前一个word的开始。
diw
:删除自当前光标到前一个word(不包括空白字符)。
daw
:删除当前光标所在word(包括空白字符)。
dG
:删除当前行到文件尾的内容。
dgg
:删除当前行到文件头的内容。
- 删除文本常用的方法:
- 更改文本常用的方法
- 如果用
c
命令代替d
这些命令就都变成来更改命令,如此类推。 ~
:改变当前光标下字符的大小写,并将光标移动到下一个字符。I
:将光标置于当前行第一个非空白字符处并进入Insert模式。A
:当前光标置于当前行尾并进入Insert模式。
- 如果用
- 更改文本常用的方法
- Visual模式
- 改变文本
7. 定制自己的vim
vimrc文件
如果你厌倦了手工键入常用命令,或者要使你喜好的选项和映射一次性准备好,这时可以统统写入到
vimrc
(vim run command)的文件里,Vim在启动的时会读取这个文件。:read {filePath}
命令:读取文件到当前vim编辑器里边。:set filetype={fileNameSuffix}
命令:设置当前vim窗口中文件的临时类型。1
// vimrc位置:
2
1.Unix and OS/2: ~/.vimrc
3
2. Windows: $VIM\_vimrc
4
5
// 设置兼容性
6
set nocompatible
7
8
// 设置历史命令缓存数量
9
set history=50
10
11
// 设置鼠标支持
12
set mouse=a
13
14
// 打开语法高亮
15
set syntax on
16
17
// 设置高亮检索
18
set hlsearch
19
20
// 设置自动缩进
21
set autoindent
22
23
// 设置缩进宽度
24
set shiftwidth=4
- 简单的映射
- 一个映射可以把一连串vim命令用一个按键来表示。
- 如:用一个功能键或者字符串,将某个word单词,变成{word},可以使用
:map
命令。 :map <F5> i{<Esc>ea}<Esc>
- 简单的映射
- 选项窗口
:options
命令:在帮助主题中寻找或设置相应的选项。set all
命令:查看所有的设置选项
- 选项窗口
- 常用选项
:help {options}
:查看某个选项的帮助。set {options}&:{options}
:修改为默认值。set nowrap
:不要折行。set sidescroll=10
:自动左右滚动10个字符。set whichwrap=b,s,<,>,h,l,[,]
:Normal和Insert模式下跨行移动命令。set cmdheight=3
:设置命令行高度为3。
- 常用选项
- 使用高亮
syntax enable
:打开语法支持。syntax clear
:关闭当前高亮。colorscheme {themeName}
:打开不同的颜色主题。
- 使用高亮
8. 编辑多个文件
- 编辑另一个文件
:edit {fileName}
:编辑另一个文件。:hide edit {fileName}
:隐藏编辑另一个文件,不进行保存当前缓冲区的内容。:edit! {fileName}
:强制编辑另一个文件,不进行保存当前缓冲区的内容。
- 编辑另一个文件
- 文件列表
- 打开多个文件
vim fileName1 fileName2 fileName3
- 打开多个文件
- 文件列表,当前在编辑哪个文件
:args
命令(arguments): 显示当前的文件列表,当前文件以[]括起来。
- 文件列表,当前在编辑哪个文件
- 文件列表中的切换
:next
命令:打开编辑下一个文件。:next!
命令:强制打开编辑下一个文件。:wnext
命令:完成两个单独的命令。即::write :next
:previous
命令:打开编辑上一个文件。:wprevious
命令:保存当前文件,打开编辑上一个文件。:last
命令:打开最后一个文件,wlast
命令。:first
命令:打开第一个文件,wfirst
命令。:2next
命令:使用计数命令,向前跳过两个文件。
- 文件列表中的切换
- 自动保存
:set autowrite
:在不同的文件转移时,不需要每次都执行write
命令。:set noautowrite
:关闭自动保存。- 备注:与word自动保存不同,过一段时间会自动保存,指某个事件发生时自动保存这个文件。
- 自动保存
- 编辑另一个文件列表
args fileName1 fileName2 fileName
:优点是不用重启Vim,就可以重新定义一个文件列表。args *.{Filename Suffix}
:支持通配符。
- 编辑另一个文件列表
- 最后文件提醒
- 当你有一个文件列表要编辑时,Vim会假设你要全部编辑它们,如果你要退出,就需要再执行一个退出命令。
- 最后文件提醒
- 文件列表
- 切换到另一文件
CTRL-^
:两个文件之间快速的切换。args fileName1 fileName2
打开文件之后,再使用了:next
或者previous
之后,可以使用这个命令非常方便的在两个文件中进行切换。
- 多个文件之间的标记。
- 全局标记:使用大写字母命名标记。
- 如:
args fileName1
后使用m{markFlag}
,这个时候去别的文件之后可以使用'
或者`跳转到自定义标记的位置。 - 如果你删除了局部标记所在的行,也就相当于删除了这个局部标记。与全局标记不同,全局标记会一直存在下去。
- 如:
- 预定义标记
- `’’:关闭文件时的光标的位置。
- `.:文件最后一次修改的地方。
- 在多文件中也可以使用
CTRL-i
和CTRL-o
两个同样试用。
- 全局标记:使用大写字母命名标记。
- 多个文件之间的标记。
- 切换到另一文件
- 备份
:set backup
:生成备份文件,文件名为原文件名加一个~
。- 备注:
ZZ
进行退出,是不能生成备份文件的,需要使用:write
。
- 备注:
:set backupext=.bak
:修改生成一个名为原文件名加.bak
的备份文件。:set patchmode=.orig
:保存一份修改前的原始文件作为副本,同时后缀名为.orig
。
- 备份
- 在文件之间复制粘贴
- 简单的复制粘贴
:edit {fileName}
打开你要找的文件,然后/{检索内容}
搜索你要复制的内容,然后v
进入可视模式选择你要复制的内容,然后y
复制,然后:edit {fileName}
回到你要粘贴的文件,之后/{检索内容}
搜索你要粘贴的位置,最后p
粘贴刚刚复制的文本。
- 简单的复制粘贴
- 使用寄存器
- 复制多个独立的文本到另一个文件中时,这个时候可以使用寄存器,使用
a
到z
的字母作为寄存器的名字。- 使用可视模式选择文本,然后
"{寄存器名称}
,即:把一整块文本复制到寄存器中。
- 使用可视模式选择文本,然后
"fyas
:把一个句子复制到名为f(first)的寄存器中。"l3Y
:把3个整行的内容复制到名为l(line)的寄存器中。"bp
:取出寄存器b中的内容文本。wdaw
:删除一个word并将其存入名为w(word)的寄存器中。
- 复制多个独立的文本到另一个文件中时,这个时候可以使用寄存器,使用
- 使用寄存器
- 向文件中追加内容
:read {fileName}
:向当前文件进行追加{fileName}
文件内容。:write >> {fileName}
:将当前文件追加到文件名为{fileName}
的文件中去,只能追加到文件的最后。:write {newFileName}
:将当前文件写入到名为{newFileName}
新文件中去。:'<,'> write >> {newFileName}
:在Visual模式下也可以进行选择要写入的文本。
- 向文件中追加内容
- 在文件之间复制粘贴
- 查看文件
vim {fileName}
:直接打开编辑文件,可以读写。vim -R {fileNmae}
:以只读模式打开文件。vim -M {fileNmae}
:强制性的避免对文件进行修改,其中-M
选项是告诉Vim工作于viewer模式中。:set modifiable
+:set write
命令组合让viewer模式下的文件进行读写。
- 查看文件
- 更改文件名
:write {filename}
:将当前文件写入到新的文件中。saveas {filename}
:将当前文件进行另存为操作,且将新文件直接打开。:file {filename}
:与saveas
功能相似,也可以实现文件名的更改。
- 更改文件名
9. 分隔窗口
将一个窗口分隔成多个窗口,可以同时显示或者编辑多个文件,或者可以显示或编辑同一个文件的不同位置。
- 分隔一个窗口
:split
命令:将屏幕分成上下两个窗口,并将光标定位在上面的窗口中。:vsplit
命令:将屏幕分成左右两个窗口,并将光标定位在左边的窗口中。CTRL-w w
(window)命令:切换当前活动窗口,与CTRL-w CTRL-w
功能相同。:close
命令:关闭当前活动窗口。比如:quit
或ZZ
均可以关闭当前窗口,但是其优点在于可以阻止你关闭最后一个窗口,不会意外的将Vim退出。:only
命令:关闭除当前窗口之外的所有窗口。
- 分隔一个窗口
- 为另一个文件分隔出一个窗口
:split {otherFile}
:打开第二个窗口同时在新打开的窗口中开始编辑。:new
:打开一个新的窗口并开始编辑一个空的缓冲区。- 备注:可以重复的使用
:split
或new
命令打开任何你喜欢的窗口数目。
- 备注:可以重复的使用
- 为另一个文件分隔出一个窗口
- 窗口的大小
:3solit {fileName}
:高度为3的新窗口,名为{fileName}
的文件。
CTRL-w +
:窗口高度增加1行。
CTRL-w -
:窗口高度减小1行。- 备注:可以增加计数命令,如
4CTRL-w -
一次减少4行。 {height} CTRL-w
:窗口高度指定为一个固定的height。- 备注:不指定高度时,默认让窗口达到它的最大的高度。
:set mouse=a
:设置使用鼠标控制窗口调整。
- 备注:可以增加计数命令,如
- 常用选项
winminheight
:强制窗口的最小高度,可以使用:set wmh=4
。winminwidth
:强制窗口的最小宽度,可以使用:set smw=4
。equalalways
:自动让所有窗口均摊屏幕上可用的高度和宽度。
- 常用选项
- 窗口的大小
- 垂直分隔
- 常用命令
:vsplit
命令:将屏幕分成左右两个窗口,并将光标定位在左边的窗口中。:vnew
:垂直打开一个新的窗口并开始编辑一个空的缓冲区。
- 常用命令
- 切换窗口
CTRL-w h
:切换到左边的窗口。CTRL-w j
:切换到下边的窗口。CTRL-w k
:切换到上边的窗口。CTRL-w l
:切换到右边的窗口。CTRL-w t
:切换到顶部的窗口。(top)CTRL-w b
:切换到底部的窗口。(bottom)
- 切换窗口
- 垂直分隔
- 移动窗口
CTRL-w H
:向左移动窗口CTRL-w J
:向下移动窗口CTRL-w K
:向上移动窗口CTRL-w L
:向右移动窗口
- 移动窗口
- 针对所有窗口操作的命令
- 常用命令
:qall
:关闭所有的窗口。(quit all):wqall
:保存所有穿够内容并关闭窗口。(write quit all):qall!
:强制关闭所有的窗口,不为文件保存。
- 常用命令
- 为每一个文件打开一个窗口
vi -o *.txt
:水平打开多个文件,并且为每一个文件打开一个窗口。vi -O *.txt
:垂直打开多个文件,并且为每一个文件打开一个窗口。:all
命令:将文件列表中的文件,各打开一个水平的窗口进行显示或编辑。:vertical all
命令:将文件列表中的文件,各打开一个垂直的窗口进行显示或编辑。
- 为每一个文件打开一个窗口
- 针对所有窗口操作的命令
- 使用vimdiff查看文件的区别
- 备注:
vimdiff
是Vim的另一种特殊的启动方式,可以显示文件的不同之处。 - 常用命令
vimdiff {fileName} {fileName}
:以diff模式打开两个文件进行比较。:vertical diffsplit {fileName}
:可以运行Vim之后进行比较两个不同的文件。]c
和[c
:跳到下一个或上一个两个文件的不同的地方。
- 常用命令
- 消除差异
diffupdate
:重新比较两个文件,更细差异,主要用于修改文本之后。dp
(diff put):将当前窗口不同的内容放到另一个窗口中。do
(diff obtain):从另一个窗口中对应的位置上取来了差异的内容。
- 消除差异
- 备注:
- 使用vimdiff查看文件的区别
- 其他
CTRL-w CTRL-^
:分隔出一个窗口来编辑前一个文件。
- 常用选项
:set scrollbind
:打开同步滚动,通常这个选项是默认开启的。laststatus
:0 永不;1 只有在有至少两个窗口时;2 总是splitbelow
:用来控制新打开窗口出现在当前窗口的下边。splitright
:用来控制新打开窗口出现在当前窗口的右边。
- 常用选项
- 其他
- 页签
- 解决平铺在显示屏幕上窗口不够用的问题。
CTRL-w T
:将当前活动窗口以页签的形式显示。:tabedit {fileName}
:以页签的形式显示{fileName}
的文件。gt
(goto tab):转到下一个标签页,最后一个标签页回到第一个。gT
(goto tab):转到上一个标签页,第一个标签页回到最后一个。{count}gt
:转到第{count}
个标签页,首个标签页的编号为1。:tabonly
:关闭除当前页签之后的所有页签。
- 页签
10. 大刀阔斧
- 命令的记录和回放
- 操作步骤:
q{register}
命令:将后续的动作记录到名为{register}
的寄存器中,其中给出的寄存器名字必须是a
到z
之间的一个字母。
- 执行你要执行的操作,按下
q
以结束对命令的记录。
- 执行你要执行的操作,按下
@{register}
命令:执行刚刚记录下来的宏。
- 操作步骤:
- 例子:
qa
:开始将后续的命令记入到寄存器a
中。
- 将光标移动到行首。
i#include "<Esc>
,在该行之前插入#include
。
- $将光标移动到行尾。
a.h"<Esc>
:在行尾加上.h"
字符。
j
:移动到下一行。
q
:停止记录。
@a
:执行记录的宏,可以加计数命令。
@@
:重复上一次宏的命令。
- 例子:
- 编辑宏的内容
"ap
命令:显示宏的内容。
"ad$
命令:将编辑好的宏的内容再一次的放入到寄存器中。
qA
命令:向寄存器a
中追加内容。
- 编辑宏的内容
- 命令的记录和回放
- 替换
- 通用形式
:[range]submitute/from/to/[flags]
:对一个指定的范围执行替换操作,range
指范围,from
被替换的内容,与搜索命令所用的正则表达式类似,to
替换为的内容,flags
指一些常用的标记。- 如:
:s/the /these /g
,g是global的意思。 - 如:
:s/one\two/one or two/g
- 如:
- 通用形式
- 常用选项
range
:作用范围,range=%
范围为所有行,而缺省只作用于当前行。flags
:标记,flags=g(global)
将改变一行所有符合目标字符串的全部字符进行替换。flags=c
:在执行每个替换前请求用户确认confirm
。y
:好吧,yes。n
:不,no。a
:全部,all。q
:退出,quit。l
:把现在这个修改结束后进行退出。CTRL-E
:向上滚屏一行。CTRL-Y
:向下滚屏一行。
- 常用选项
- 替换
- 命令的作用范围
:1,5s/this/that/g
:对第1行到第5行的文本执行替换操作。:3s/this/that/g
:对指定行进行替换操作。:.,$s/this/that/g
:当前行到最后一行范围,如:$=1,$
。:?^Chapter?,/^Chapter/s=this=that=g
:使用搜索模式来指定作用范围。:?^Chapter?+1,/^Chapter/-1s=this=that=g
:增与减行的范围操作。.+3,$-5s/this/that/g
:将当前行的下三行到倒数第6行的作用操作。't,'bs/this/that/g
:使用标记确定操作范围。'<,'>s/this/that/g
:Visual模式确定的范围。'>,$
:从上一次VIsual模式时选定的文本区域的结束处到文本末尾的这样的区域。.,.+4
:.
当前行到,+4
从当前行到向下4行。
- 命令的作用范围
- 全局命令
:[range]global/{pattern}/{command}
:找到符合某个匹配模式的行,然后将命令作用于这些行上,全局命令的默认作用范围是整个文件。:g=//=s/foobar/barfoo/g
:整个文件中包含//
的行,进行替换操作。:g=//=d
:整个文件中包含//
的行,进行删除操作。
- 全局命令
- Visual Block模式
- 插入文本
Insert<Esc>
:在文本块的每行的行首,进行插入文本。Astring<Esc>
:在文本块的每行的行尾,进行插入文本。
- 插入文本
- 改变文本
cstring<Esc>
:修改文本块的文本,仅仅会修改文本块的内容。Cstring<Esc>
:修改文本块的文本,会删除文本块尾部的内容。
- 改变文本
- 改变文本的大小写
~
:交换大小写。U
:将小写变大写。u
:将大写变小写。
- 改变文本的大小写
- 填充命令
rx
:以字符x
进行文本块的填充操作。
- 填充命令
- 左右移动
<
命令:会使你的文本向左移动一个shift单位。>
命令:会使你的文本向右移动一个shift单位。:set shiftwidth=4
:设置一个shift单位的宽度。
- 左右移动
- 将多行内容粘贴起来
J
命令:使文本块纵跨的所有文本被连接为一行。gJ
命令:如果你想要保留那些前导空白和后缀的空白时,可以使用。
- 将多行内容粘贴起来
- Visual Block模式
- 读写文件
- 读取文件
:read fileName
:读入文件的内容放在当前行。$read fileName
:追加到文件的最后。0read fileName
:把文件放在第一行的上面。60read fileName
:那文件放在指定行的上面。
- 读取文件
- 写入文件
:write fileName
:没有指定一个范围时该命令将写入整个文件的内容。:.,$write fileName
:当前行到文件尾的内容写入文件,如果文件存在则失败。:.,$write! fileName
:强制当前行到文件尾的内容写入文件,会进入覆盖模式。:.write fileName
:将当前行写入文件中。:.write >> fileName
:将当前行的内容追加到文件中。
- 写入文件
- 格式化文本
:set textwidth
: 查看键入文字的时候每行的内容能自动调节到适应当前设置的宽度,每一行都会自动调整到只包含最多几个字符,Vim进行格式化文本的时候不会打断你的单词。:set textwidth=100
: 设置键入文字的时候每行的内容能自动调节到适应当前设置的宽度,每一行都会自动调整到只包含最多100
个字符,Vim进行格式化文本的时候不会打断你的单词。:gqap
:gq
为Vim的一个格式化操作符号,ap
是一个文本对象,即:a paragraph。gg gqG
:格式化整个文件的内容。gqgq
:格式化当前行,可以与.
重复命令一起使用。gqj
:格式化当前行和它下面的一行。
- 格式化文本
- 改变大小写
guw
命令:gu
是变小写的操作符,w
是位移。gUw
命令:gU
是变大写的操作,w
是位移。g~w
命令:将字母的大小写进行反转,大写变小写,小写变大写。gugu
命令:使一整行变为小写,简写为guu
,同理gUgU
、gUU
、g~g~
、g~~
。
- 改变大小写
- 使用外部程序
sort < input.txt > output.txt
:!5G
:!
过滤操作符,5G
为移动命令,决定了将哪个区域送到过滤程序中。!!date
:!!
命令为过滤当前行,date
命令显示当前时间。write !wc
:将文本写入一个命令wc
中,wc
命令是统计行数,单词数,字符数。
- 使用外部程序
- 读写文件