可视模式让你可以选择文件的一部分内容,以便作比如删除,复制等工作。
进入可视模式
v
用v命令进入可视模式。当光标移动时,就能看到有一些文本被高亮显示了,它们就是被选中的内容。
三种可视模式
v
一个字符一个字符地选。从按下v的那个字符起,一直到光标所移动到的位置之间的内容都被选中。
V
一行一行地选。从按下V的那行起,一直到光标所移动到的行之间的所有行都被选中。
Ctrl-v
它选中屏幕上的一个矩形区域。以按下Ctrl-v的位置为一个角,光标所在位置为它的对角。
离开可视模式
按下就会离开可视模式。
可视模式下的编辑
在可视模式下删除文本
d
删除所选中的部分。
D
删除所选中部分所在的行。即使没有把一行都选中,也把一行都删除。
复制
v
复制选中的部分。
D
复制所选中部分所在行。即使没有把一行都选中,也把一行都复制。
更改模式
可以随时在可视模式中的三种之间切换,只需按进入想要切换到的模式的命令即可。
更改文本
c
删除所选中的部分并切换到输入模式。
C
删除所选中的部分所在的行并切换到输入模式。
合并行
当选中想合并在一起的行以后,按下
J(大写)
就可以了。
程序员的命令
>
所选中的部分都缩进一个tab。
在所选中的部分删除一个tab的缩进。
=
自动排列所选中的内容。
查看man
K
命令查看关键字的man page,在可视模式它会以选中的文本为关键字。
可视块模式
通过Ctrl-v进入的模式为可视块模式,它会选中一个矩形区域。
插入内容
I字符串
会在每一行所选中内容的开始前添加”字符串”
改变文本
c字符串
会把选中的内空删除并进入输入模式。你只需要在选中的第一行输入一个字符串,当按下后所有行的选中部分都会和第一行一样。这里的字符串中不能包含换行符,如果包含了换行符的话,它就不会这么神奇,就会根普通模式下的c一样了。
C(大写)
会直接删除到行尾,其它与c一样。
A(大写)
会在选中的块后面添加文本。它们是对齐的。
如果要在选中的块紧接每行末尾添加内容,则需用$来指定选择到行尾,而不是简单地用光标。
替换内容
r
用来把选中的内容替换成同一个字符。
缩进
>
>将选中的块缩进一个shiftwidth
九月 3, 2006 @ 9:17 am · 归类于
打开一个新窗口
最简单的打开新窗口的方法是
:split
它把一个窗口分成两个,光标留在上面的那个窗口中。
通过
Ctrl-w+方向键
来在窗口间切换
比如
Ctrl-ww 或 Ctrl-w Ctrl-w
切换到下一个窗口;
Ctrl-wj 和 Ctrl-wk
分别切换到下一个窗口和上一个窗口。
要关闭窗口,用
:q 或 ZZ 或 Ctrl-wc
找开一个新窗口并在其中打开一个文件
:split 文件名
也可以给split命令分配一个初始命令,也就是说执行完split接着要做的
:split +命令 文件名
比如
:split +/printf three.c
命令会把当前窗口分成两个然后在上面的窗口中查找printf这个字符串。
控制窗口大小
如果给split命令指定一个参数,则表示新找开窗口的高度
比如
:3split alpha.c
打开一个高度为3的窗口并在其中打开alpha.c
:new命令
:new
命令用起来就跟split差不多,只有一点不同:new命令会在新窗口中新建一个文件,而split只是在新窗口中打开原窗口中的内容。
分割并查看(Split and View)
:sview
命令新建一个窗口并且其中的内容是只读的。
改变窗口大小
行数Ctrl-w+
把当前窗口高度增加”行数”行(如不指定行数,默认为1)
行数Ctrl-w-
把当前窗口高度减少”行数”行(如不指定行数,默认为1)
Ctrl-w=
让所有窗口一样高
行数Ctrl-w_
把当前窗口的高度设为”行数“,如不指定则把它最大化。
缓冲
Vim用缓冲来代表一个文件。当你在编缉一个文件时,只是在编缉它的缓冲。当你完成编辑保存时,Vim把缓冲中的内容保存进文件。当然,事情并不是
这么简单。在Vim中设置的标记之类的也保存在缓冲中。你可以同时拥有多个缓冲,当你编辑多个文件时就是这样。当你想要一个Vim窗口,并且想编辑多个文
件时,把这个窗口最大化是不管用的,因为这不是一个窗口,其它的窗口还是能看得见的。此时你可以把不编辑的缓冲隐藏(hide),用命令
:hide
一个缓冲有三种可能的状态:
活动:显示在屏幕上的窗口
隐藏:没有显示在屏幕上的在编辑的缓冲
不活动:缓冲没有在编辑,但是保存着它的信息
第三种状态需要多解释一下,当你编辑另一个文件时,当前文件的内容就没有用了。Vim就关掉它。但是它的一些其它信息可能还有用。(这一部分比较混乱,原文说得也不是很清楚,不懂也无所谓)
要查看缓冲的列表,用
:buffers
命令。输出的第一列是缓冲编号,第二列是状态,第三列是与缓冲对应的文件。
状态共且以下几种:
- 不活动的缓冲
h 隐藏的缓冲
% 当前缓冲
# 其它缓冲
+ 文件被编辑而未保存
选择一个缓冲
:buffer 缓冲编号
如果你不知道缓冲的编号,可以用
:buffer 文件名
下面的命令分割窗品并编辑指定的缓冲
:sbuffer 缓冲编号
或
:sbuffer 文件名
还有很多关于缓冲的命令:
:bnext 去下一个缓冲
:count bnext 执行count次去下一个缓冲
:count sbnext 先分割窗口,然后执行:count bnext
:count bprevious 去上一个缓冲。如果指定了count,则执行count次
:count sbprevious 先分割窗口,然后执行:count bprevious
:count bNext 同:count bprevious
:count sbNext 同:count sbprevious
:blast 去最后一个缓冲
:sblast 先分割窗口再执行:blast
:brewind 去第一个窗口
:sbrewind 先分割窗口再执行:brewind
:bmodified count 去第count个编辑过的缓冲
:sbmodified count 等于:split加:bmodified
缓冲选项
通常当所有编辑一个文件的窗口都关掉后,这个窗口的缓冲就变成”不活动”,如果不想这样,可以设置
:set hidden
让它变成隐藏而不是不活动。
通常分割/缓冲相关的命令会分割当前窗口,但是也可以让Vim在已经有窗口打开所指定的缓冲时,切换到那个窗口而不是新建一个:
:set switchbuf=useopen
更多关于switchbuf的内容参见23章。
九月 1, 2006 @ 11:04 am · 归类于
这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。
剪切,粘贴和复制
当你在删除文字的时候,比如d, x之类的,被删除的内容都被保存了下来。你可以通过
p
来粘贴它们。
交换字符
有时你会把两个字母打反,比如把the打成teh。用
xp
命令就可以把它们调换位置。原理是这样的,首先x会把e删除并保存,p会把它粘贴到光标所在位置,也就是h之后。
关于粘贴的更多
p命令可以用多次。p命令把内容粘贴在光标之后,而
P
把内容粘贴在光标之前。
标记
Vim允许你在文本中做标记。命令
ma
会在光标所在处做一个名为a的标记。你最多可以在文本中做26个标记(a-z)。
要移动到一个标记,用命令
`标记
其中`是在键盘左上角数字一左边的那个键
要移动到一个标记所在行的行首,用命令
‘标记
其中‘是单引号
标记在删除大量文件内容人时很有用。比如
在你想要删除的文本的开始处做标记ma
然后移动到想删除文本的末尾,用d`a删除从此位置到标记a间的内容。
注意,标记会跟着它所标记处的文本移动(比如在它之前插入或删除了东西)
标记都在哪呢?
:marks
命令会列出所有标记的列表。
复制
y
命令用来复制,它的用法与d很相似。
复制一行
Y(大写)
复制一行内容
管道
!动作 命令
会把由”动作”选中的文本作为”命令”的输入,并用”命令”的输出替换选中的文本。
举个例子,sort命令会对一个文件的内容排序。如果想对当前正在编辑文件的前10行排序,可以这样:
先把光标移动到第一行,然后
!10G sort
!!命令
命令把当前行作为“命令”的输入。(这是一个把系统命令的输出放到文件里的好方法)。
编辑另一个文件
:vi 或 :e
可以关闭当前文件,并打开新的文件。
如果当前文件没有保存,则会出现提示。这时使用
:w
会保存未保存的文件。
View命令
:view 文件
会在Vim中以只读方式打开文件。
处理多个文件
可以在调用Vim时指定多个参数以依次编辑多个文件
Vim 文件1 文件2 文件3 …
默认情况下Vim每次只会编辑一个文件,当编辑完一个文件时,
:next
命令会关闭光前文件打开下个文件开始编辑。
我在哪里
当你在编辑多个文件时有时会忘了自己在编辑哪个。
:args
命令会显示当前正在编辑哪个文件。
编辑上一个文件
当要编辑上一个文件时,用命令
:previous 或 :Next。
编辑每一个或最后一个文件
要编辑第一个文件,用
:rewind
要编辑最后一个文件,用
:last
编辑两个文件
当同时编辑两个文件时,正在编辑的是当前文件,没在编辑的会被当成“另一个文件”,在这两个文件间切换要方便的多。用命令:
Ctrl+^
九月 1, 2006 @ 10:55 am · 归类于
这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。
简单查找
/要查找内容
用/向后查找,紧随其后的要查找的内容。然后按下回车,Vim就会去为你找你想要的东西了。
要注意
.*%/\?!$ 还有空格
都有特殊意义,如果要查找的内容中包含这些字符,要在前面加上一个\。
要查找区配的下一处,用命令
\ 或 n
它们的作用是相同的。
查找历史
查找命令可以允许你来查看查找的历史,在输入一个/以后,不要按回车,然后再按上下键就可以查看上一条或下一条查工历史了。在某个历史处如果按回车,就会查找此内容。
查找选项
高亮
:set hlsearch
命令可以让所有的查找都高亮显示匹配的部分。
:set nohlsearch
取消高亮选项
增量查找
一般情况下,Vim在查找时要等待用户输入整个要查找的内容,然后再去查找。增量查找则是不等用户输入完毕,就查找已输入的部分。要使用它需要进行下面设置:
:set incsearch
如查取消,则
:set noincsearch
反向查找
?要查找的内容
命令从当前位置开始反向查找,即向文件的开始查找。
改变方向
N
命令可以改变查找的方向并查找改变方向后的下一处匹配。
基本的正则表达式
行首(^)和行尾($)
^表示一行的开始,include会匹配每一处的include,而^include只会匹配在行首的include。
$表示一行的结束,was$只会匹配在行末的was。
如果想要匹配只有一个词the的行,用^the$。
匹配任意单个字符(.)
.匹配任一个字符,比如c.m表示以c开头以m结尾的有三个字母的字符串。
匹配特殊字符
好多字符在正则表达式中有特殊含意。要匹配这一类字符,要在前面加一个\。比如,要匹配the.,就要用the\.
八月 30, 2006 @ 12:43 pm · 归类于
这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。
按词移动
w
按下w会前进一个词。
b
按下b会后退一个词。
这里,就像在Vim中的大部分情况下一样,在这两个命令前面加上一个数字可以让它们重复做多次。
移动到行首或行末
$
$会让你移动到所在行的末尾。
^
^会让你移动到所在行的开始。也可以做相似的事。不过^会移动到第一个非空的字符处,而会移动到行首。
这两个命令也接受数字参数,比如
2$
会移动到下一行末。
在行上查找
f要查找的字符
f用来在一行上查找一个字符并移动到该字符所在处。比如
fx
用来移动到此行当标后第一个x处。如果有一个数字参数,就可以指定移动到某个指定的匹配位置。
F
F用来向左查找。
移动到指定行
行号G
G命令会把你带到用行号指定的行。如果使用没有行号的G,将会移动到最后一行。
显示当前所在位置
:set number
Vim的可制定性是很强的,所以你可以通过:set设定很多选项。number就是其中之一。它是一个布尔选项,用来控制是否在最左边显示行号。
:set number
可以把它打开。
:set nonumber
则可以关闭此选项。
Ctrl+g
Ctrl+g会显示当然后在的位置。
向上和向下翻屏
Ctrl+u
会向上翻半屏
Ctrl+d
会向下翻半屏
删除文本
dw
dw会删除一个词。你应该可以看得出来,这里的w代表的就是word(词).其实d后面可以加好多东西来控制删除的对象。比如:
d$
会删除从当前位置到行末的所有内容。
数字放在哪
这里有一个疑问,如果想删除三个词,那么应该怎么办?是d3w,还是3dw。其实它们都能做到,不过原理不太一样。d3w是一次删除三个词,而3dw是执行三次删除一个词。其实这两者可以混起来,比如2d3w。
改变文本
c
c用来改变文本。它的用法跟d一样。
cc
用来删除一行并进入输入状态。
cw
用来删除一个词并进入输入状态等。
但是cw跟dw有一个不同之处。dw删除了一个词以后,还删除该词后面的空格。而cw只是会删除这个单词,空格仍然保留。
.
.命令会重复上一次所做的删除(d, x)或改变(c)命令。
合并行
J
J(大写)将当下一行接在当前行后,并在两者间插入一个空格来合并这两行。
替换字符
r替换的字符
r命令把当标处的字符替换成在r命令中指定的字符。
更改大小写
~
通过~可以把光标处的字符用它的大写(如果现在是小写)或小写(如果现在是大写)替换。
宏
Vim有着简洁而强大的宏功能。
q宏名
按下 q+宏名 后会进入宏录制状态,也就是说,此后发生的一切操作都会记录到名为“宏名”的宏中。如果名为“宏名”的宏已经存在,则将它覆盖。
@宏名
会调用名为“宏名”的宏。
特殊字符
当要输入特殊字符时,可以用
Ctrl+k特殊字符代号
可以通过命令
:digraph
来得到一个完整的对应表,来查看特殊符号所对应的代号。
比如,要输入á, 则要通过下面的方法
Ctrl+ka’
这是我在看一本叫做Vim Tutorial的书时作的笔记,去掉了例子,作了一下总结。放上来作为一个Vim的小教程分享一下。本系列文章可转载,但请注明出处:http://mingfal.bloggerspaces.com。
开始之前要做的
touch ~/.Vimrc
这会创建空的~/.Vimrc文件,这会告诉Vim你想要让Vim以Vim方式工作。如果不这样做的话,Vim会以Vi兼空模式运行,会有好多有用的功能没法使用。这也可以在Vim运行过程中通过
:set nocompatible
来实现。
第一运行Vim
gVim file.txt
会运行gvim(Vim的图行化前端),并在其中打开file.txt文件
Vim命令
Vim
会让你在终端打开Vim编辑,而不是像刚才那样打开一个新的窗口。
模式
Vim是一个模式化的编辑器。也就是说,它在不同的模式下会有不同的表现。当最下面的一行是文件名或为空时表示正在普通模式。如果是–INSERT–表示是在编辑模式。而–VISUAL–则表示目前是可视化模式。
插入文本
i
键入i后会从普通模式转变到编辑模式。此时输入的东西将会作为文件的一部分。
当你编辑完毕后,按下就会从编辑模式转回普通模式。同时,不管现在是在什么模式下,都会把你带回普通模式。
移动光标
当你回到命令模式(即普通模式)时,可以用下面的键来移动光标
h(左), j(下), k(上), l(右)
这可能看上去比较奇怪,谁会用l去表示右???但是实际上这是有原因的。移动光标上是在编辑过程中经常要做的,而h , j, k, l就在放右手手指的地方,也就是说按这几个键是最快的。当然,也可以用方向键来移动光标,不过那会大大减低你的编辑速度。
删除字符
x
当你想删除一个字符时,把光标移动到它上面,然后按下x键,它就会消失。
撤消和重做
u
在普通模式下按下u会撤消上一布的操作。
Ctrl+R
如果撤消的次数过多,按下 Ctrl+R 会重做上次撤消的操作。
U
U(大字)是一个特殊的撤消键,它会撤消在在最后编辑的行上所作的所有操作。
退出
ZZ
ZZ会退出Vim并对所编辑的文件保存。
取消修改
:q!
当你编辑完一个文件发现你并不想这样编辑它时,:q! 会让你退出Vim而不保存所作的修改。
追加
a
i会在光标所在安符前插入字符,而a会让你在当标所在的位置之后继续输入内容。
删除一行
dd
dd命令会删除当前所在的一行内容。
新开始一行内容
o
o命令会在光标所在行下面加入一行,并将光标移动的此行的开始以供输入。
O
如果想在光标所在行的上面加入一行,请使用命令O(大写)
获得帮助
:help
:help命令让你可以进入和查看Vim的帮助。用ZZ退出帮助。同时可以用像在Vim一样的h, j, k, l键来移动光标。帮助中会有一些被竖线括起来的词,那其实是超级链接。用Ctrl+]就可以跟随它,Ctrl+t用来后退。如果要查找某一特定主题的帮助,使用
:help 主题
同时
也会起到和:help一样的效果。
重复命令
当要做多次同样的操作时,可以用计数来加快这一过程。
9k
会让你向上移动9行。通过在命令前加一个数字n,就可以执行这一命令n次。
Vim教程
Vim自带了一份Vim教程
:vimtutor
会打开它。