[关闭]
@youjustdoit 2015-03-16T22:48:45.000000Z 字数 10279 阅读 2165

vim文档由两部分构成:

1.用户指南

任务导向解释,从简单到复杂。像阅读一本书一样从头到尾。

2.参考指南

精确地描述每一个事情在vim中是如何工作的
在这些手册中使用的注释在这里:|注释|
jumping around(跳转)
在两个部分之间包含超级链接,允许你在一个编辑任务描述和命令选项的精确解释之间快速跳转。使用这两个命令

01.2 Vim 安装

多数手册假定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
如果文件已经存在,你可能想保留它。如果你现在开始运行vimcompatible选项应该关闭。你可以用这个命令检查它:

  1. :set compatible?

如果响应出现nocompatible一词,就对了。如果响应出现compatible 一词,那么你遇到麻烦了。你得去找出为何选项仍然是这样设置的,用这个命令:

  1. :scriptnames

如果文件不在列表中,检查它的位置和名称;如果在列表中,那么一定是compatible选项在其他地方打开了。
更多信息参考|vimrc||compatible-default|

01.3 使用vim tutor

你可以使用vimtutor代替阅读此文本来学习你的第一个vim 命令,这是一个30分钟的教程,教给你大多数基本的vim上手功能。
Unix and Ms-Window, 如果vim已经完美安装,你可以从shell启动:vimtutor
这将会产生一个tutor文件副本,在没有破坏源文件的风险下以便你能编辑它。
有一些tutor翻译版本,如果有可能适合你的话就去找找。使用二个字母语言代码,如french:

  1. vimtutor fr

对于openVMS,如果vim已经正确安装,你可以从VMS提示符下启动vimtutor:

  1. @VIM:vimtutor

可选择添加二个字母的语言代码
其它系统,你得做一点工作

  1. vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor' -c 'w! TUTORCOPY' -c 'g'

这将会在当前文件目录编写文件TUTORCOPY文件,使用tutor翻译版,附加二个字母语言代码到文件名后,如french

  1. vim -u NONE -c 'e $VIMRUNTIME/tutor/tutor.fr' -c 'w! TUTORCOPY' -c 'g'
  1. vim -u NONE -c "set nocp" TUTORCOPY

额外的参数确保vim以好的方式启动

  1. del TUTORCOPY

01.4 版权

vim用户手册和参考手册版权归Bram Moolenaar所有。(译注:关于版权的内容就不再翻译了)

开启vim第一步

本章内容学完仅为提供足够信息用vim编辑一个文件。不是很好或够快,但你可以用vim编辑了。花一些时间来练习这些命令,他们形成的基础如下所示:

|02.1| 首次运行vim
|02.2| 插入文本
|02.3| 移动跳转
|02.4| 删除字符
|02.5| 撤销和重做
|02.6| 其它编辑命令
|02.7| 退出
|02.8| 查找帮助

02.1 首次运行vim

启动vim, 输入命令

  1. gvim file.txt

在Unix系统你可以在任何命令提示符下键入上面命令,如果是windows系统,打开Ms-Dos提示符窗口,然后键入此命令
在这二种情况下,vim开始编辑一个叫file.txt的文件,因为这是一个新文件,你会得到一个空白窗口。
THE VIM COMMAND
gvim 命令致使编辑器创建一个新的窗口用于编辑,但如果你用这个命令

  1. vim file.txt

编辑模式出现在你的命令窗口,但gvim你会有额外的特征,像一个菜单工具栏,这将在后面提到更多。

02.2 插入文本

vim编辑器是一个模式编辑器,那意思就是编辑方式不同,依赖于你在哪种模式中,二个基本模式是正常模式插入模式。在normal 模式下你键入的字符是命令;在插入模式下字符是作为文本插入。
启动vim时将会在normal mode,键入"i"命令转为插入模式,可以输入文本,按Esc键返回normal mode
为了看你在什么模式下,键入命令

  1. :set showmode

你会注意到当你键入分号时,光标移动到窗口最后一行,那就是你键入分号命令之处。(以一个分号开始的命令)按Enter键完成这个命令。
现在,如果你键入i命令,vim就会在窗口底部显示--INSERT--,这显示你出于插入模式。

02.3 移动跳转

在你返回normal模式后,你可用这些键移动

h 向左移动
j 向下移动
k 向上移动
l 向右移动
Note:
你也可以使用箭头键移动光标,然而,如果你那样做的话,将极大地减低你编辑的速度,因为按压箭头键,你必须将手指从本文键移开到箭头键,可以想见你在一个钟内可能得有数百次这样去做。况且有一些键盘是没有箭头键的或处在不常用的位置,那么在这种情况下有必要认识hjkl键的使用

02.4 删除字符

02.5 撤销和返撤销(Undo and Redo)

undo

设想你删除太多,好,你再重新键入,但更容易的方法存在。`u`命令撤销上一次编辑动作。看一看这个动作:用`dd`删除第一行后,用`u`命令又复原了。 另一种情况:移动光标到首行`A`处:

A young intelligent turtle ~
现在键入xxxxxxx删除短语"A young",结果如下: intelligent turtle ~

键入`u`撤销上一次删除,还原删除掉的`g`字符
  1. g intelligent turtle ~
下一个`u`命令还原与上一次删除字符相邻的字符:
  1. ng intelligent turtle ~
下一个`u`命令还原给你字符u ,等等如此下去

ung intelligent turtle ~
oung intelligent turtle ~
young intelligent turtle ~
young intelligent turtle ~
A young intelligent turtle ~

Redo

如果你撤销太多次,你可以按`CTRL-R`(redo)逆向之前的命令,(译注:也就是撤销掉之前的撤销动作本身的行为) 这是撤销命令的特殊版,使用`U`命令(大写`U`)。撤销行命令撤销已编辑的上一行上所作的所有改变。键入这个命令二次将取消之前的`U`命令的操作动作。`U`命令是它自身的一个变化,用`u`命令撤销、用`CTRL-R`撤销之前的撤销命令所产生的变化。

02.6其它编辑命令

`vim`有大量命令来改变文本。参考|O in|和下面常用的一些。

APPENDING

`i`命令在字符前插入一个字符,那样操作很好;但如果你想添加一些附加的东西到行末尾会发生什么?这时用`a`(append)命令可以完成这个。比如,改变一行

and that's not saying much for the turtle. ~
变成 and that's not saying much for the turtle!!! ~

移动光标到行末的`.`处,键入`x`删除`.`号,然后键入a!!! ``.附加三个!!!号后变成 and that's not saying much for the turtle!!! ~

打开一个新行

`o`命令在光标下创建一个新空白行,并进入`插入模式`,可以在新行键入文本。 `0`命令(大写)在光标上方打开一个新行。

使用计数命令

假设你想向上移动9行,你可以键入"kkkkkkkkk"或键入命令`9k`。其实是,你可以在很多命令前用一个数字。比如,你用`a!!!`添加三个感叹号到行末,另一个方法是用命令`3a!`,与此类似,删除三个字符,使用命令`3x`,计数字总是在命令前应用。

02.7 退出

退出`vim`,使用`ZZ`命令,写入文件并退出`vim` `Note:`

不像很多其它编辑器,vim不会自动作一个备份文件。如果你键入ZZ,你的命令已作承诺,没有回头路。你可以配置vim editor 产生备份文件。参考|07.4|

放弃改变

有时你作了一系列更改,但突然意识到在开始前最好退出。别担心,`vim`有退出-抛弃事情的命令: `:q!` 完成命令后别忘记按`Enter`键 这个命令有三部分:`:`分号进入命令行;`q`命令告诉编辑器退出;`!`取消命令修饰符。如果你仅仅键入`:q`,`vim`将显示一条错误信息并拒绝退出:
E37: No write since last change (use ! to override) ~

02.8 查找帮助

常用帮助文件命令:
  1. :help
你也可以使用键盘上的`F1`键 `:help`显示常用的帮助窗口,帮助窗口是一个正常模式窗口。`vim`创建者可以用帮助系统很聪明或很懒的方式做一些事情。他们使得帮助窗口作为一个正常模式编辑窗口,你可以使用所有的正式的`vim`命令在帮助信息间移动,因此,`h` `j` `k` 和`l`键可以向左、向下、向上向右移动。 退出帮助窗口,使用与编辑退出`ZZ`相同的命令,这仅关闭帮助窗口,而不会退出`vim` 在你阅读这个帮助文本时,你将会留意到一些也在竖线内封闭起来的文本。(比如,|help|)。这个是一个超级链接,如果光标在竖线之间任何地方,按压`CTRL-]`组合键,帮助系统带你到你想要的项目。 在做了一些跳转后,你可能想返回。`CTRL-T`键返回之前的位置。`CTRL-O` 在这儿也会工作良好。 在帮助屏幕的顶部有一个注释`*help.txt*`。在'*"之间的名称用于帮助系统定义的标签(超级连接目标)。参见|29.1|有关tags使用的详细资料

下一章:|usr 03.txt| 移动跳转
版权:参见|manual-copyright|

Moving around

在你插入或删除文本之前,光标须移动到正确的位置。vim有大量的命令来定位光标。本章将为你展示如何使用大多数重要的命令,在|O lr|下面你会发现这些命令的列表。

|03.1| 单词移动
|03.2| 移动到一行的开头或结尾
|03.3| 移动到一个字符
|03.4| 匹配一个括号
|03.5| 移动到一个指定的行
|03.6| 告诉你在哪里
|03.7| 周边滚动
|03.8| 简单搜索
|03.9| 简单搜索程式
|03.10| 使用标记(marks)

03.1 单词移动

如果一个单词以非单词字符结尾,诸如"." "-“ or ")",要让vim看成是一个单词,参见iskeyword选项
通过空格间隔移动也是可以做到的,但这不是正常意义上的字,那就是为何大写被采用的原因了。如下图所示:
大写命令

使用大小写混合命令,你可以快速向前、向后移动通过一个段落。

03.2 移动到一行的开头或末尾

"0"命令没有附带计数命令,因为"0"是计数的一部分。出于意料的是,用"^"命令附带数字计数则没有任何影响。

03.3 移动到一个字符

大多数有用的移动命令之一是一个单字符搜索命令。命令fx在一行中搜索单个字符x。提示:"f"代表"find"

例如,你在下列行的开头处,假设你想去到humanh处,仅执行命令 "fh",光标将定位在h字符上。
fing comand

这也显示命令fy移动到单词really的末尾。
你可以指定一个计数,因此你可以用3fl命令移动光标到单词foull字母处。
find with a count

大写F命令向左方搜索:
F

tx命令像fx命令样运行,但tx命令只移动到最近的要搜索的字符处,即使后面有相同的字符。除非它停止之前已经搜索的字符命令。提示:t代表To, Tx 表示相反的方向搜索。
to search

这四个命令能用";" "," 对搜索的结果重复循环。(译注:“;” 向前右侧搜索,而","则向相反的方向。光标永不会移动到另一行

有时你开始搜索时,意识到键入一个错误的命令。退出搜索,按Esc

03.4 匹配括号

当你编写程序时,常常以嵌套()结构结束。那么"%"命令很方便。它会移动到匹配的括号,参见下图:
matching paren
这也适用于[] and { } 配对。(这个可以用matchpairs选项定义)

03.5 移动到一个特定的行

如果你是一个C or C++程式员,你是熟悉诸如下列的错误语句的:

prog.c:33: j undeclared (first use in this function)

这告诉你可能要去33行修复一些东西。如何找到第33行?一种方法是键入9999k 回到文件顶部然后键入32j往下移动32行,显然这不是好的方式。更好的方式是用G命令,外加一个计数字,如33G将定位到给出的33行上。

special line

03.6 告诉你位于何处

想要看见你在文件的什么地方,有三个途径:

此信息显示你正在编辑的文件名、光标位于行数、总行数、通过文件的百分比以及光标所在列数
有时你看到一个分列数,比如:"col 2-9" 这意味这光标定位在第二个字符,但因为字符是一个tab空格,占据八个空格宽度,屏幕列是9

03.7 上下滚动

scroling

一个常见的问题是在用j向下移动许多行后,光标停留在屏幕底部,你想看到光标所在行的内容,可用zz命令完成;zt命令将光标所在行置于顶部,zb命令置于底部。一些更多的有关滚动的命令参考|0 sc|。想一直保持光标背景行用scrolloff选项。

03.8 简单搜索命令

搜索字符用"/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

这不会重置选项,相反,它不显示高亮来表示。而一旦你执行一个搜索命令,高亮显示又会再回来。

tuning searches

有一些选项改变搜索如何工作,这些是一些必要的选项:

:set incsearch

这使得当你仍然在键入字符时,vim显示字符匹配。使用这个检查正确的字符匹配将会被发现,按压<Enter>键跳转到那个位置。或键入这个命令改变搜索字符:

:set nowrapscan

该命令在文件末尾停止搜索,或当你向相反方搜索时。wrapscan选项是默认的。

intermezzo

如果你喜欢之前提到选项之一,可以设置它在每一次使用vim时使用它,你可以在vim启动文件中输入下列命令。
编辑这个文件,如前所述在|not-compatible|或使用这个命令来发现所处之处:

:scriptnames

编辑文件,以此为例:

:edit ~/.vimrc

然后添加一行命令来设置这个选项:

Go:set hlsearch<ESC>

"G"移动到文件末尾,"o"开始一新行,在你键入`:set'命令的地方,用 结束insert mode,然后输入命令:ZZ

如果你再次开始用vim时,hlsearch选项已经被设置了。

03.9 简单搜索样式

vim编辑用户使用正则表达式定义所搜索的内容。正则表达式功能强大、使用简练方法定义搜索样式。但是,这种强大是要付出一定代价的,因为定义正式表达式有点棘手。

在这一节,我们仅提及一些必要的东西,更多的有关搜索表达式命令在27章|usr 27.txt|,你可以在这儿看到完整的解释:|pattern|

字符$匹配一行的末尾,因此,was$仅匹配在行末尾的单词was在下面的例子中以X来标记the匹配的位置:
simplesearch

使用/the$命令,我们发现如下的匹配
the$

使用/^the命令,我们发现匹配到行开头
此处输入图片的描述

用"ter." 来搜索仅发现第二个匹配你的搜索。

03.10 使用标记(marks)

当你用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"
marked

Note:
CTRL-I命令同 命令
“:jumps"命令会列出一列你跳转位置的列表。你最后使用的输入用一个标记">"来标记。

命名标记

Vim 能够让你在文本中放置属于你自己定义的标记。命令"ma"用"a"标记这个位置。在文本中你可以放置26个标记(从a到z),你看不见它们,它们只是vim记忆的一个位置。

回到一个标记位置,用命令 `{mark},"{mark}" 在这里是一个标记字母。这样移动到"a" 标记

`a

命令'mark(单引号标记或反撇号)

未完待续

`

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注