@youjustdoit
2015-03-16T22:48:45.000000Z
字数 10279
阅读 2165
vim
文档由两部分构成:
任务导向解释,从简单到复杂。像阅读一本书一样从头到尾。
精确地描述每一个事情在vim
中是如何工作的
在这些手册中使用的注释在这里:|注释|
jumping around(跳转)
在两个部分之间包含超级链接,允许你在一个编辑任务描述和命令选项的精确解释之间快速跳转。使用这两个命令
CTRL-l
跳转到光标下的一个项目CTRL-O
跳转回原来位置 CTRL-l
在上面按CTRL-l
键。 多数手册假定vim
已经被正确安装。如果你还没有那样做或如果vim 没有正确运行(如files 没有发现或在GUI中菜单没有 显示),那么首先阅读安装这一章:|usr 90.txt|。
本手册通常假定你正在使用vim兼容性关闭。对于大多数命令没有关系,但有时它是重要的,比如多级撤销。一个简单的方法是确认你正在使用的是已正确安装了,复制一个vimrc 文件。自始自终vim
这样做的,你不必检查它位于哪里。如何做依赖于你使用的系统。
Unix:
:!cp -i $VIMRUNTIME/vimrc example.vim ~/.vimrc
MS-DOS
MS-windowns OS/2:
:!copy $VIMRUNTIME/vimrc example.vim $vim/ vimrc
Amiga:
:!copy $VIMRUNTIME/vimrc example.vim $VIM/.vimrc
如果文件已经存在,你可能想保留它。如果你现在开始运行vim
,compatible
选项应该关闭。你可以用这个命令检查它:
:set compatible?
如果响应出现nocompatible
一词,就对了。如果响应出现compatible
一词,那么你遇到麻烦了。你得去找出为何选项仍然是这样设置的,用这个命令:
:scriptnames
如果文件不在列表中,检查它的位置和名称;如果在列表中,那么一定是compatible
选项在其他地方打开了。
更多信息参考|vimrc|
和|compatible-default|
你可以使用vimtutor代替阅读此文本来学习你的第一个vim
命令,这是一个30分钟的教程,教给你大多数基本的vim上手功能。
在Unix
and Ms-Window
, 如果vim
已经完美安装,你可以从shell启动:vimtutor
这将会产生一个tutor文件副本,在没有破坏源文件的风险下以便你能编辑它。
有一些tutor翻译版本,如果有可能适合你的话就去找找。使用二个字母语言代码,如french:
vimtutor fr
对于openVMS,如果vim
已经正确安装,你可以从VMS
提示符下启动vimtutor:
@VIM:vimtutor
可选择添加二个字母的语言代码
其它系统,你得做一点工作
vim
做这个:
vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor' -c 'w! TUTORCOPY' -c 'g'
这将会在当前文件目录编写文件TUTORCOPY文件,使用tutor翻译版,附加二个字母语言代码到文件名后,如french
vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor.fr' -c 'w! TUTORCOPY' -c 'g'
vim -u NONE -c "set nocp" TUTORCOPY
额外的参数确保vim
以好的方式启动
del TUTORCOPY
vim
用户手册和参考手册版权归Bram Moolenaar所有。(译注:关于版权的内容就不再翻译了)
本章内容学完仅为提供足够信息用vim
编辑一个文件。不是很好或够快,但你可以用vim
编辑了。花一些时间来练习这些命令,他们形成的基础如下所示:
|02.1| 首次运行
vim
|02.2| 插入文本
|02.3| 移动跳转
|02.4| 删除字符
|02.5| 撤销和重做
|02.6| 其它编辑命令
|02.7| 退出
|02.8| 查找帮助
启动vim
, 输入命令
gvim file.txt
在Unix系统你可以在任何命令提示符下键入上面命令,如果是windows系统,打开Ms-Dos
提示符窗口,然后键入此命令
在这二种情况下,vim
开始编辑一个叫file.txt的文件,因为这是一个新文件,你会得到一个空白窗口。
THE VIM COMMAND
gvim
命令致使编辑器创建一个新的窗口用于编辑,但如果你用这个命令
vim file.txt
编辑模式出现在你的命令窗口,但gvim
你会有额外的特征,像一个菜单工具栏,这将在后面提到更多。
vim
编辑器是一个模式编辑器,那意思就是编辑方式不同,依赖于你在哪种模式中,二个基本模式是正常模式和插入模式。在normal 模式下你键入的字符是命令;在插入模式下字符是作为文本插入。
启动vim
时将会在normal mode
,键入"i"命令转为插入模式,可以输入文本,按Esc
键返回normal mode
为了看你在什么模式下,键入命令
:set showmode
你会注意到当你键入分号时,光标移动到窗口最后一行,那就是你键入分号命令之处。(以一个分号开始的命令)按Enter
键完成这个命令。
现在,如果你键入i
命令,vim
就会在窗口底部显示--INSERT--
,这显示你出于插入模式。
在你返回normal
模式后,你可用这些键移动
h 向左移动
j 向下移动
k 向上移动
l 向右移动
Note:
你也可以使用箭头键移动光标,然而,如果你那样做的话,将极大地减低你编辑的速度,因为按压箭头键,你必须将手指从本文键移开到箭头键,可以想见你在一个钟内可能得有数百次这样去做。况且有一些键盘是没有箭头键的或处在不常用的位置,那么在这种情况下有必要认识hjkl
键的使用
x
键;删除多个字符xxxx
键dd
命令J
命令。在vim
中你可能想将两行合并,意味着在它们之间的分隔符要被删除,将光标移动到前面一行尾处,按J
键(大写)如下: A young intelligent ~
turtle ~
移动光标到第一行,然后按J
键后变成:
A young intelligent turtle ~
键入`u`撤销上一次删除,还原删除掉的`g`字符A young intelligent turtle ~
现在键入xxxxxxx
删除短语"A young",结果如下: intelligent turtle ~
下一个`u`命令还原与上一次删除字符相邻的字符:
g intelligent turtle ~
下一个`u`命令还原给你字符u ,等等如此下去
ng intelligent turtle ~
ung intelligent turtle ~
oung intelligent turtle ~
young intelligent turtle ~
young intelligent turtle ~
A young intelligent turtle ~
移动光标到行末的`.`处,键入`x`删除`.`号,然后键入a!!! ``.附加三个!!!号后变成 and that's not saying much for the turtle!!! ~and that's not saying much for the turtle. ~
变成 and that's not saying much for the turtle!!! ~
不像很多其它编辑器,
vim
不会自动作一个备份文件。如果你键入ZZ
,你的命令已作承诺,没有回头路。你可以配置vim editor 产生备份文件。参考|07.4|
E37: No write since last change (use ! to override) ~
你也可以使用键盘上的`F1`键 `:help`显示常用的帮助窗口,帮助窗口是一个正常模式窗口。`vim`创建者可以用帮助系统很聪明或很懒的方式做一些事情。他们使得帮助窗口作为一个正常模式编辑窗口,你可以使用所有的正式的`vim`命令在帮助信息间移动,因此,`h` `j` `k` 和`l`键可以向左、向下、向上向右移动。 退出帮助窗口,使用与编辑退出`ZZ`相同的命令,这仅关闭帮助窗口,而不会退出`vim` 在你阅读这个帮助文本时,你将会留意到一些也在竖线内封闭起来的文本。(比如,|help|)。这个是一个超级链接,如果光标在竖线之间任何地方,按压`CTRL-]`组合键,帮助系统带你到你想要的项目。 在做了一些跳转后,你可能想返回。`CTRL-T`键返回之前的位置。`CTRL-O` 在这儿也会工作良好。 在帮助屏幕的顶部有一个注释`*help.txt*`。在'*"之间的名称用于帮助系统定义的标签(超级连接目标)。参见|29.1|有关tags使用的详细资料
:help
:help {subject}
x
命令的帮助文档,输入下列命令 :help x
:help deleting
vrim
命令索引帮助 :help index
控制符帮助文件,需要用CTRL-
作为前缀(先按ctrl
键加短划线-
,再按crtl-A
组合键)
:help CTRL-A
:help ctrl-H
i
命令 :help i ctrl-H
-
:help -t
:help 'number'
<Up>
向上箭头键,例如,使用这个命令 :help i <Up>
#输入:hlep i 按住shift
键的同时按向上的箭头键可弹出如下图的帮助命令 E37:No write since last change (use ! to override) ~
下一章:|usr 03.txt| 移动跳转
版权:参见|manual-copyright|
在你插入或删除文本之前,光标须移动到正确的位置。vim
有大量的命令来定位光标。本章将为你展示如何使用大多数重要的命令,在|O lr|下面你会发现这些命令的列表。
|03.1| 单词移动
|03.2| 移动到一行的开头或结尾
|03.3| 移动到一个字符
|03.4| 匹配一个括号
|03.5| 移动到一个指定的行
|03.6| 告诉你在哪里
|03.7| 周边滚动
|03.8| 简单搜索
|03.9| 简单搜索程式
|03.10| 使用标记(marks)
使用w
命令移动光标到前一个词。像大多数命令,你可以用数字前缀移动到多个单词。比如,3w
移动三个单词,这个图显示它如何运作的。
请注意w
命令移动到下一个单词的开头,如果它已经是一个单词的开头。
b
命令反向移动到前一个单词的开头:
e
命令移动到下一个单词的末尾(如果光标在单词的开头或中间任意位置,则移动到本单词的末尾),ge
命令则反向移动光标到前一个单词的末尾
如果一个单词以非单词字符结尾,诸如"."
"-“
or ")"
,要让vim
看成是一个单词,参见iskeyword
选项
通过空格间隔移动也是可以做到的,但这不是正常意义上的字,那就是为何大写被采用的原因了。如下图所示:
使用大小写混合命令,你可以快速向前、向后移动通过一个段落。
"$"
命令移动光标到一行的末尾,如果键盘上有End
键可以做到同样的效果。"^"
命令移动到一行的首个非空字符前"0"
命令(零)移动到该行的第一个字符,home
键可以做到同样的事情。见下图: "$"
命令带有计数,但移动到行末尾几次并无多大意义。因此,它会使编辑者移动到另一行的末尾。比如,1$
移动到第一行的末尾(当前所在行),2$
则移动到下一行的末尾,如此类推。"0"
命令没有附带计数命令,因为"0"
是计数的一部分。出于意料的是,用"^"
命令附带数字计数则没有任何影响。
大多数有用的移动命令之一是一个单字符搜索命令。命令fx
在一行中搜索单个字符x
。提示:"f"
代表"find"
例如,你在下列行的开头处,假设你想去到human
的h
处,仅执行命令 "fh",光标将定位在h
字符上。
这也显示命令fy
移动到单词really
的末尾。
你可以指定一个计数,因此你可以用3fl
命令移动光标到单词foul
的l
字母处。
大写F
命令向左方搜索:
tx
命令像fx
命令样运行,但tx
命令只移动到最近的要搜索的字符处,即使后面有相同的字符。除非它停止之前已经搜索的字符命令。提示:t
代表To
, Tx
表示相反的方向搜索。
这四个命令能用";"
","
对搜索的结果重复循环。(译注:“;”
向前右侧搜索,而","
则向相反的方向。光标永不会移动到另一行
有时你开始搜索时,意识到键入一个错误的命令。退出搜索,按Esc
键
当你编写程序时,常常以嵌套()
结构结束。那么"%"
命令很方便。它会移动到匹配的括号,参见下图:
这也适用于[]
and { }
配对。(这个可以用matchpairs
选项定义)
如果你是一个C or C++程式员,你是熟悉诸如下列的错误语句的:
prog.c:33: j undeclared (first use in this function)
这告诉你可能要去33行修复一些东西。如何找到第33行?一种方法是键入9999k
回到文件顶部然后键入32j
往下移动32行,显然这不是好的方式。更好的方式是用G
命令,外加一个计数字,如33G
将定位到给出的33行上。
G
命令定位到文件末尾gg
命令定位到文件的开头33G
命令定位到33行"number%"
命令是另一种移动到行的方法,比如:50%
移动到文件的一半处,90%
移动到差不多结尾。
H
命令 H
代表home
此命令将回到文件顶行
M
命令 M
代表 middle
此命令将跳转到文件中部行L
命令L
代表last
跳转到文件最后一行想要看见你在文件的什么地方,有三个途径:
CTRL-G
命令,你会得到一条像这样的信息(假设ruler
选项已关闭) "usr 03.txt" line 233 of 650 --35%-- col 45-52
此信息显示你正在编辑的文件名、光标位于行数、总行数、通过文件的百分比以及光标所在列数
有时你看到一个分列数,比如:"col 2-9" 这意味这光标定位在第二个字符,但因为字符是一个tab空格,占据八个空格宽度,屏幕列是9
number
选项,这将在每一行前面显示行号 :set number
:set nonumber
number
是一个逻辑选项,前面加上"no"
将关闭。一个逻辑项只有二个值,不是开就是关。ruler
选项。这在vim
窗口右下角显示光标位置 :set ruler
ruler
选项有一个优势,它并不占用太多空间,从而为你的文本增加了空间。CTRL-U
命令文本屏幕向下滚动一半(屏幕右侧滚动条向上)CTRL-D
命令文本屏幕向上滚动一半(右侧滚动条向下)CTRL-E
命令向上滚动一行CTRL-Y
命令向下滚动一行CTRL-F
命令向前滚动一整屏CTRL-B
命令向后滚动一整屏一个常见的问题是在用j
向下移动许多行后,光标停留在屏幕底部,你想看到光标所在行的内容,可用zz
命令完成;zt
命令将光标所在行置于顶部,zb
命令置于底部。一些更多的有关滚动的命令参考|0 sc|。想一直保持光标背景行用scrolloff
选项。
搜索字符用"/string"
命令,查找包括单词include,比如用命令:
/include
你会注意到当你键入"/"
光标跳转到vim窗口的最后一行,类似于冒号命令,那就是你键入单词的地方,你可以按空格键来修正它,有需要的时候用左、右光标键。按Enter
键执行该命令。
Note
:
字符.*[]^%/\?~$
有特殊含义,如果你想在搜索中使用它们,必须在它们前面加上\
杠。
查找下一个同样字符用n
命令,在光标后面试用这个命令查找第一个#include
/#include
然后键入n
命令几次,在文本中你将移动到每一个#include 处。你也可以使用计数,如果你知道你想追踪哪一个的话。3n
查找第三个要找的。用/
命令时用计数不能工作。
"?"
命令类似于"/"
,但反向搜索:
?word
N
命令向相反的方向重复上一次搜索。在"/"
命令搜索后用N
命令搜索相反方向,在?
命令搜索后用N
命令向前搜索。
IGNORING CASE
(忽略大小写)
通常你得键入恰切的你想找的内容。如果你不太关注单词的大小写,设置ignorecase
选项:
:set ignorecase
如果你现在搜索"word",将会搜索"Word"和"WORD"。再恢复忽略设置:
:set noignorecase
HISTORY
假设你做了下面三个搜索:
/one
/two
/three
现在不按Enter
键,开始键入一个简单的"/"搜索,如果按<Up>
键,vim会释出/three
命令行。在这点上按Enter
键将搜索three
单词。如果你不按Enter
键,继续按<Up>
键,vim则改变提示符到/two
命令,再按一次<Up>
键,则释出/one
命令
如果你知道之前搜索过的范例,想再次使用它,在按压向上箭头键前输入那个字符,如键入/o<Up>
输入/o 按<Up>
键,就会释出命令/one
搜索命令以":"
冒号开头也是一种历史命令搜索,输入:
命令后按<Up>
或向下箭头键,搜索之前的命令再次执行它。
假设你在文本中看到词语"TheLongFunctionName" ,你想找到它的下一个所在位置,你可以键入/TheLongFuncitonName
,但显然那样键入太多了。
有一个简单的方法是:光标定位到这个单词用"*"
命令,vim会抓取光标下的单词,用它作为搜索字符。
"#"
命令可在相反的方向上完成同样的搜索,你可以使用计数搜索,如3*
命令搜索第三个单词所在位置。
如果你键入/the
命令,它也将会搜索there
。仅查找以the
结尾的单词,用命令:
/the\>
"\>"
是一个特殊的标记仅匹配在一个单词的末尾,与此相类似的\<
命令仅匹配在单词的开头,从而仅搜索单词"the"
的命令:
/\<the\>
这样它不会匹配"there" 或"soothe"。需要注意的是`"*"` and `"#"` 命令仅查找整个单词(你可以使用`g*` and `g#`来匹配部分单词)
当你编辑一个程式时,你看到一个叫nr
的变量,你想检查它在哪里使用过。你可能会移动光标到nr
并使用*
命令,按压n
键一直往前匹配。
这儿有另一个方法,键入命令
:set hlserach
如果你现在搜索"nr", vim将高亮显示所示匹配"nr"的。这是一个很好的发现变量在哪些地方使用的方法,不需要它的时候,键入命令:
:set nohlsearch
如果你仅仅想删除高亮显示,用命令:
:nohlsearch
这不会重置选项,相反,它不显示高亮来表示。而一旦你执行一个搜索命令,高亮显示又会再回来。
有一些选项改变搜索如何工作,这些是一些必要的选项:
:set incsearch
这使得当你仍然在键入字符时,vim显示字符匹配。使用这个检查正确的字符匹配将会被发现,按压<Enter>
键跳转到那个位置。或键入这个命令改变搜索字符:
:set nowrapscan
该命令在文件末尾停止搜索,或当你向相反方搜索时。wrapscan
选项是默认的。
如果你喜欢之前提到选项之一,可以设置它在每一次使用vim
时使用它,你可以在vim
启动文件中输入下列命令。
编辑这个文件,如前所述在|not-compatible|或使用这个命令来发现所处之处:
:scriptnames
编辑文件,以此为例:
:edit ~/.vimrc
然后添加一行命令来设置这个选项:
Go:set hlsearch<ESC>
"G"
移动到文件末尾,"o"
开始一新行,在你键入`:set'命令的地方,用 结束insert mode,然后输入命令:ZZ
如果你再次开始用vim时,hlsearch
选项已经被设置了。
vim编辑用户使用正则表达式定义所搜索的内容。正则表达式功能强大、使用简练方法定义搜索样式。但是,这种强大是要付出一定代价的,因为定义正式表达式有点棘手。
在这一节,我们仅提及一些必要的东西,更多的有关搜索表达式命令在27章|usr 27.txt|,你可以在这儿看到完整的解释:|pattern|
^incliude
则仅匹配在行的开头单词"include"。字符$
匹配一行的末尾,因此,was$
仅匹配在行末尾的单词was
在下面的例子中以X
来标记the
匹配的位置:
使用/the$
命令,我们发现如下的匹配
使用/^the
命令,我们发现匹配到行开头
匹配任意单个字符
.
字符匹配任何存在的字符,比如,范例"c.m"匹配第一个字符是c
,第二个字符是任意字符,第三个字符是m
匹配特殊字符
如果你真想匹配一个点号,你得避免它的特殊意义,在它前面加上反斜杠。
如果你搜索"ter.",你会发现这些匹配了:
用"ter." 来搜索仅发现第二个匹配你的搜索。
当你用G
命令跳转到一个位置时,vim记得从之前这个跳转的位置,这个位置称为mark
,回到你来的地方,用这个命令:
``
这个` 是一个反撇号,或打开一个单引号字符。
如果你使用同样的命令二次,你将会又跳转回去。那是因为’ 命令跳转它自身。
一般来讲,每次你执行一个命令,该命令可以进一步移动光标超越在同一行上,称之为跳转。这包括搜索命令"/" 和"n" (匹配有多远无关紧要)但不包括像"fx" "tx" or 单词移动命令"w" "e"等字符的搜索。
同样,命令j
k
也并不被认为是一个跳转,即便你使用计数命令使它们移动光标到一个长距离的脱离。
命令`` 在两点之间前后跳转, "CTRL-O"命令跳转到原先旧有的位置(提示:O 表示older); "CTRL-I"跳回到一个新的位置(提示:I 只是与键盘上的O相邻)。考虑如下的命令序列:
33G
/^The
CTRL-O
你首先跳转到33行,然后搜索以"the"开始的一行,再者用CTRL-O
命令跳回到33行,再一次输入CTRL-O
命令,带你回到你开始的地方。如果你现在使用CTRL-I
命令,又会跳转到33行。用另一种CTRL-I
来搜索匹配"the"
Note:
CTRL-I
命令同 命令
“:jumps"命令会列出一列你跳转位置的列表。你最后使用的输入用一个标记">"来标记。
Vim 能够让你在文本中放置属于你自己定义的标记。命令"ma"用"a"标记这个位置。在文本中你可以放置26个标记(从a到z),你看不见它们,它们只是vim记忆的一个位置。
回到一个标记位置,用命令 `{mark},"{mark}" 在这里是一个标记字母。这样移动到"a" 标记
`a
命令'mark(单引号标记或反撇号)
未完待续
`