vim user manual - Getting Started

Usr_01.txt 关于用户手册

文本内(指用户手册文件)超链接跳转

光标移动到目标位置(非超链接的文本也可)

ctrl + ]   // 前进
ctrl + o  // 后退,可多次后退

超链接文本由两个竖线框出来,但一般为隐藏状态,可使用:set conceallevel=0修改隐藏等级(可能还需要设置样式:hi link HelpBar Normal)。

要使用此时提到的所有特性,需要Vim正确安装,并处于nocompatible模式即不兼容Vi。(使用:set compatible?命令检查vim安装状态)
另外可使用vimtutor可以快速浏览vim基础用法(vimtutor具体用法见文档)
超链接(tag)的定义可以使用星号。:hi link HelpStar Normal可以显示出来,关于tag的用法见29.1

Usr_02.txt 使用Vim的第一步

gvim或vim命令运行Vim

gvim打开的是一个GUI编辑窗口,附带一个Menu,除此之外和vim在命令窗口中类似

vim file.txt  // 若文件不存在则创建,新建的文件打开时vim编辑器窗口最下面命令行有提示

tilde(~)指明该行不存在于文件中(文件末尾之后)

插入与模式

vim有两种模式Normal和Insert,在Normal下的按键均为命令,此时按下i进入编辑模式,通过ESC返回到Normal模式。通过命令:set showmodevim将在最下行显示当前的所处的模式。无论何时都可以使用ESC到Normal模式。

移动光标

在Normal模式下使用hjkl命令分别向左、下、上、中移动一行光标

hjkl在顺手的位置,避免去使用箭头浪费大量的时间

删除字符

使用x在Normal模式下删除当前光标下的字符
使用dd删除当前行
使用J删除当前行尾的换行符(注意是大写的命令,一般需要按住shift)

撤销与恢复

u撤销一次操作,ctrl+r恢复,U撤销当前行所有的操作

需要安装的Vim处在“Vim way”,而不是“Vi way”,即不兼容Vi的状态

追加

i是在当前的光标字母之前插入,但此时不好应付末尾的情况,a则是在当前光标的字符之后插入

插入新行

o在当前行的下方插入一行新行
O在上方插入新行

使用数字

可在任何的命令之前添加一个数字表示该命令的执行次数,如,9j光标下移9行,3a!ESC追加三个!。

退出

ZZ命令仅退出当前的文档,而不是编辑器。

退出时,修改会自动保存

:q!可直接退出不保存修改,:e!可以不退出而重新加载原文档覆盖当前的所有修改。

寻求帮助

使用:help {subject}命令查询帮助文档。

//默认查询在Normal状态下的命令如
:help x
:help deleting
:help index  // 完整的vim命令索引
:help ctrl-a  //查询ctrl在命令前加ctrl-
// 查询插入模式下的命令
:help i_ctrl-h
// 查询vim命令行参数
:help -t  //即前面加-
//查询vim配置参数
:help 'number'  //即使用单引号括起来
//其他特殊按键使用<>括起来查询
:help some<Tab>  // tab补全,ctrl+d列出候选项
:help i_<Up>

其他的help的用法参见help-summary

Usr_03.txt 移动光标

单词为单位移动

w向右移动一个单词
b向左移动一个单词
均移动到单词的首字母。ege同样是向左右移动但移动到尾字母

关于选项'iskeyword'
顾名思义该选项中的内容作为关键字,主要用于确定单词的边界方便用于搜索和匹配,比如这里的移动需要寻找单词边界、模式匹配查找、ctrl+]确定搜索内容的边界。使用:set iskeyword&会将其内容重置为默认值,win32下为"@,48-57,_,192-255",192之后的为拉丁文不用管。


格式为:"@,^a-z,48-57, -~,^,_,^",其中@表示所有的大小写字母,a-z表示a到z的字母但前面加了^表示的排除,要表示^需要放在最后,^,放中间表示排除逗号, -~表示空格到~,48~57表示的ASCII码的数字(数字不能直接放到选项中需要使用对应的ASCII码),127以上的十进制值参见:help digraph-table

由于iskeyword选项内容会对w移动的单词边界造成影响(比如is/are可以被认为是两个,也可以被认为是一个,关键在于/字符是否在该选项中),所以如果只想通过空格区分那么使用W

移动到行首/行尾

$移动到行尾,在前面可是添加数字:2$表示移动到下一行的行尾
^移动到该行第一个非空字符
0移动到该行第一个字符
移动到行首的两个命令无法使用数字

移动到某个字符

fx在当前行将光标跳转到查找到的第一个字符x(如果x存在),f即find,可以在前面添加数字查找非第一个如3fl查找当前行的第三个l。f是从当前光标的位置开始查找的。
F从后往前查找。
tf命令一致,只是光标将停在查找到的字母前面,意为to。
T表示从反方向查找
这四种命令执行后,都可以使用;,命令下下一个或者上一个查找结果移动

可以使用ESC取消命令

匹配括号

当光标处于(按下%,会跳转到匹配的),反过来也行,同样对于[]{}也生效。当光标不处于一个括号时,会先查找到第一个括号,然后指向其匹配。

跳转到指定行

33G跳转到第33行,G跳转到最后一行。1Ggg表示跳转到第一行。
50%跳转到整个文件的50%的位置。
HML表示当前可看见行的高中低位置。

显示当前所在位置

ctrl+g将会显示编辑的文件名、所在行、总行数、列位置等

"usr_03.txt" line 233 of 650 --35%-- col 45-52,col有两个值,第一个表示以字符为单位的位置,后一个表示以屏幕位置,这里Tab认为是一个字符,但屏幕宽度可能站4个字符。

set number设置number选项会在每行前面显示行数。由于是布尔值使用set nonumber关闭。

set ruler设置ruler选项可以在右下角里显示当前的位置,格式和ctrl+g产生的结果一样。

滚动屏幕

ctrl+u将滚动块向上移动半屏幕即内容向下移动半屏幕,ctrl+d将滚动块向下移动半屏幕。
ctrl+e将滚动块向下移动一行,ctrl+y将滚动块向上移动一行。

注意滚动块的方向和内容的方向相反

ctrl+f向前滚动一屏,ctrl+b向后移动一屏,即内容分别forward和backward
zz将光标所在行放在屏幕中间。
zt将光标所在行放在屏幕的top。
zb将光标所在行放在屏幕的bottom。

简单查找

/string然后按下<Enter>查找string,之后按下n向下一个查找移动,N向上一个查找移动,?/作用一样只是反向查找,此时n的方向也是反的。
特殊字符的查找需要转义,包括.*[]^%/\?~$

使用set ignorecase忽略查找的大小写,要恢复设置为noignorecase即可。


命令历史记录,按下/后使用箭头上下即可得到查找历史,也可以先输入一个prefix后在使用箭头来补全。:的历史记录同理


使用*代替string过长的情况,此时会使用当前光标下的关键字作为string执行查找(关键字的识别和iskeyword的内容有关),并定位到当前的下一个查找。#同理,只是查找方向相反定位到当前的上一个。


局部匹配(/执行的策略,比如/the会匹配there)与严格匹配/\<the\>表示严格查找the这个单词,\<表示只查找以the开头的,\>表示只查找the结尾的。*#本身就是查找整个单词(执行严格匹配和/不同),如果需要局部匹配可以使用g*g#(同/相同)


set hlsearchset nohlsearch可以设置搜索结果是否高亮。如果只需要关闭此次搜索的结果高亮使用:nohlsearch


set incsearch将在搜索输入时(即按下回车之前)就会高亮匹配的字符,incsearch是一个bool量,关闭为noincsearch
set nowrapscan则最后一个匹配项后无法跳转回第一个,也是一个bool量,默认开启的。

简单模式匹配查找(简单的正则表达式查找)

^表示匹配处在行首的,$表示匹配处在行尾的。如/^the$只有当该行只存在一个单词the时才会匹配。
.匹配任意单个字符。要匹配.使用转义。

这里只说了非常简单的正则表达式的规则

使用marks(标记)

在使用前面介绍的命令进行跨行跳转时,vim会记住所有的跳转的位置,这些位置就叫做mark。通过:jumps可以查看vim记录的所有跳转过的位置。

w,e,j,k,f等并不会不记录

``或者''可以在当前和上一次的mark之间跳转,跳过去跳回来,两点之间跳转。`'的区别在于,'只会将光标放在行首,前者会记录光标具体的列数。
ctrl+o则是向上一次mark跳转(o即older),ctrl+iTab等效)向下一次mark跳转,根据的就是:jumps列表。

使用命名标记,ma为光标所在行设置标记a,可用标记为a-z的26个字母。然后使用'a或者`a跳转。特别适合于需要在关联的两部分内容的时候跳转,跳转后使用``或者''即可完成两部分快速跳转。
:marks列出所有的标记。'表示上一次的跳转,[]表示最后一次修改的开始和结束位置。

Usr_04.txt 小修改

Operators and motions

即一个操作紧跟一个移动,或者说移动包含的内容作为操作的输入

即删除当前光标到将移动到的光标位置之间的文本。

dw  // 假如当前光标在单词首部则删除该单词
d3w //删除三个单词(初始在单词首)
d$  //删除当前光标到文件尾的内容

关于目的光标位置下的这个字符,是否删除和移动光标的命令有关。如w移动到下个单词首部此时就不会删除不然这个单词就不全了。e则会删除以把该单词删除干净。$也会删除。

改变文本

cd操作符类似,只是在删除之后会进入插入模式。

假设此时光标在单词首,dw删除的是该单词及近跟的空格(w毕竟是到下个单词的首部),de则只删除整个单词空格保留,这些都是显而易见的。特例在于cwc其他都一样就是cw有一点不同,此时的cw表现的像ce及j即跟着的空格不会删去。这是从Vi继承下来的特性


cc类似dd但是会保留缩进


某些常用的operator-motion的形式,直接给了单独的命令如下:
x stands for dl (删除光标下的字符)
X stands for dh (删除光标左边的符)
D stands for d$ (删除到一行的末尾)
C stands for c$ (改变到一行的末尾)
s stands for cl (改变一个字符)
S stands for cc (改变整行)


r替换一个字符,按下r后,直接输入一个字符代替光标下的字符,虽然s也可以做到但r不需要进入插入模式。3rx表示将连着的三个字符都替换成x,如果x是Enter则只会有一个Enter

重复一个改变

.重复执行最近的一次改变。如要修改文中的多出four为five,可以执行如下的命令序列:

/four
cwfive
n
.
n
.

这些改变不包括在内:uctrl+r、一切使用:的命令

可见模式

v进入visual mode,此时通过移动可以高亮选中的字符。适合于operator-motion操作中不好一次性定位的motion,故可视化选中后在执行。

V进入行选择可视化模式,此时左右移动光标无效,整行整行的选择
ctrl+v进入矩形选择可视化模式
在VisualMode时,使用o切换选择哪边固定。在ctrl+v的矩形选择下o往对角跳转,O往水平跳转

移动文本

同通过dx删除的文本实际是被保存了下来,可以使用p命令粘贴,dd删除将放在下一行,其他的放在当前光标之后。P放的位置和p相反。

xp,可以交换相邻的两个字符。

复制文本

yopertor类似d一样,只不过不会有任何改变,只是将选择的文本复制,然后可以使用p粘贴。

yy复制整行,等效于Y

使用剪切板(跨程序的复制粘贴)

GUI Vim提供相应的菜单项,包括复制、剪切、粘贴等。如果使用命令则只需在yp之前添加"*即可。

文本对象(text object)

继operator-motion之后,现在可以使用operator-text object了。比如aw表示a word,is表示inner sentence(不删除句尾空格),as表示a sentence。
比如此时光标在单词的中间,就可以使用daw直接删除该单词。
text-object也可以使用在Visual mode中。

替换模式

R进入替换模。使用<Insert> key可以在插入模式和替换模式之间替换。

(usr_04)总结

可以使用各种operator和movement组合。
但这里有一些命令只能单独使用:
~改变当前字符的大小写,也可在Visual mode下改变选中的所有的大小写。
I移动到非空行首,然后进入插入模式。
A移动到行尾,然后进入插入模式。

Usr_05.txt 设置你的配置

vimrc文件

对于常用的设置可以写下来保存在vimrc文件中,vim在启动时将会执行vimrc中命令以应用设置。所有的在:之后的命令都可以写在vimrc中。

如果vimrc已存在,可以执行:edit $MYVIMRC直接编辑
该章节中只包含基础的项,更详细的vim脚本信息在usr_41.txt中

vim初始化过程内容较多,具体参考starting.txt文档,这里给出vimrc相关的加载说明。
-u filename指定文件作为vimrc,但会导致跳过某些初始化,并且不会初始化$MYVIMRC
system-vimrc若存在则总是被读取用于初始化,一般在$VIM/vimrc(该文件不一定存在)。具体路径也显示在:version命令的输出中。即使读取了system-vimrc也会读取用户vimrc。
对于用户自定义的vimrc,vim会自动搜索以下的路径,选择第一次找到的加载。(除此之外还有可能从环境变量加载,具体参考文档)

"$HOME/.vimrc"	   (for Unix) (*)
"$HOME/.vim/vimrc"	   (for Unix) (*)
"$HOME/_vimrc"	   (for Win32) (*)
"$HOME/vimfiles/vimrc" (for Win32) (*)
"$VIM/_vimrc"	   (for Win32) (*)

Note: For Unix and Amiga, when ".vimrc" does not exist,
"_vimrc" is also tried, in case an MS-DOS compatible file
system is used.  For MS-Windows ".vimrc" is checked after
"_vimrc", in case long file names are used.
Note: For Win32, "$HOME" is checked first.  If no "_vimrc" or
".vimrc" is found there, "$VIM" is tried.  See |$VIM| for when
$VIM is not set.

vimrc加载总结
若存在system-vimrc一定会被加载,但其不一定存在
然后从以上说的位置查找用户自定义vimrc(这些设置可以覆盖system-vimrc)
如果没有用户自定义vimrc,加载default.vim

vimrc_example.vim解释

参考文档
突然蹦了个vim脚本出来,语法太多现在看的糊里糊涂的,留着之后看

defaults.vim解释

default_example.vim包含了大多数人都喜欢的配置,特别适合新的用户。另外当没有用户自定义的vimrc时,会被默认加载。也可以在自定义的vimrc中source $VIMRUNTIM/defaults.vim,在defaults的基础上添加自己的选项。

	// 默认文件配置可以被跳过,只需要let skip_defaults_vim=1
	//特别是在system-vimrc中(因为system-vimrc若存在是被默认加载的)
	if exists('skip_defaults_vim')
	  finish
	endif

	// 指定在插入模式下的使用backspace等命令的删除行为
	//eol表示只允许删除到断行处即最多只能删除到行首,无法删除到上一行
	//start表示只能删除到插入的位置,也就是新增的能删,插入之前的无法删
	//indent表示是否能删除自动缩进
	set backspace=indent,eol,start

	// 历史命令和搜索的条数
	set history=200
	
	// 右下角显示正在输入的命令
	set showcmd

	// 按下Tab后是否显示待补全的菜单(针对状态栏的命令即:,/等开头的命令)
	set wildmenu

	// key codes和mapping codes的等待时间
	//在ESC按下后会等待超时,在使用远程终端时可以关闭提高响应速度
	set ttimeout
	set ttimeoutlen=100

	// 如果最后一行被截断,显示@@@代替直接不显示
	set display=truncate

	// 即在搜索的输入过程中(回车之前),开始匹配
	set incsearch
	
	// 不要将0开头的数字识别为8进制
	set nrformats-=octal
	
	// 定义一个按键映射
	map Q gq

	// 语法高亮
	syntax on

	// 开启文件类型自动检测,根据扩展名或文件内容特征识别文件类型
	//比如*.c被识别为c源程序文件,#!/bin/bash被识别为shell脚本
	//文件类型会被用于语法高亮,执行特定的文件类型插件,使用不同的缩进规则等
	filetype plugin indent on

简单映射

可以将一连串的命令绑定到一个按键上,如

// 将<F5>映射为 为单词添加{}的命令
:map <F5> i{<Esc>ea}<Esc>
注意:在实际输入时<F5>可以按<F5>键也可以直接输入'<F5>'字符串
			对于<ESC>,可以先按下<Crtl-V>再按下<ESC>在map中输入,也可以直接输入字符串'<ESC>'

:map命令列出当前的映射(至少是在Normal mode下的)

注意如果使用映射键和vim命令冲突则不会生效
一个可用的符号是\,所以可以使用\p,\c等来做映射则不会冲突

添加包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
不要试图从本手册中去获取什么知识, 使用Vim更多的是一种技能而 不是一种知识, Vim的学习需要的更多的不是头脑而是双手, 经常按书中 的指示进行示例性的操作, 在学习Vim众多精致的技巧时, 不要贪图一下 子全都掌握, 最好是看一条技巧后, 马上在编辑器上进行操作, 这样在以 后实际的编辑操作时你的手指就会建立一种自然的反应而不是由头脑来搜 索该使用哪一条操作技巧. 建议读者不动手来不读书. 如果手边没有一 个合适的Vim编辑器环境可供操练, 那么建议读者还是不要在这里浪费时 间. 如果读者是在气温比较低的条件下阅读此书从而增加了你动手的惰性 时, 也请不要浪费时间, 这会严重影响学习的效果. 虽然本书鼓励读者多动手, 但也绝非说一点不要动脑, 相反, Vim中 多达几百个的命名与操作方式有它自己的规律可循, 在你的手指能对要完 成的编辑任务条件反射之前, 最好还是由头脑做一点辅助. 经常总结自己 最经常进行的操作. 为这些操作找出最简练的办法来, 在每学习一条新的 操作之前与自己以前的编辑经验比较一下, 找出节省你敲击键盘次数的捷 径来. 是提升Vim经验值的不二法门. 其实, Vim与其它编辑器一个很大的区别在于, 它可以完成复杂的编 辑与格式化功能. 在这些领域还少有软件能与它分庭抗礼, 但是, 与所有 的灵活性的代价一样, 你需要用自己的双手来实现它. 这在事实上造成 了用户在使用Vim过程中的几个自然阶段. 一开始是notepad, word, edit垄断你的大脑, 这些东西根深蒂固, 挥之不去. Vim 的使用对你而言是一场噩梦, 它降低而不是提高了你的 工作效率. 对三种工作模式的不解甚至使你认为它是一个充满BUG或者至 少是一个古怪的与当今友好用户界面设计严重脱节的软件. 事实上, 这些 起初看起来古怪的特性是Vim(或者是vi)的作者和它的用户们在自己漫长 的文字编辑和程序设计生涯中总结出来的最快速最实在的操作, 在几乎等 于计算机本身历史的成长期中, 历经无数严厉苛刻的计算机用户的批评与 检验, 无用的特性或糟糕的设计在Vim用户群面前根本就没有生存的余地. Vim细心而谨慎的作者们也不允许自己精心设计的软件里有这样的东西. 第二个阶段你开始熟悉一些基本的操作, 这些操作足以应付你日常 的工作, 你使用这些操作时根本就不假思索. 但这些阶段你仍然很少去 碰Vim那晦涩的在线帮助文档. 它在你心里只是notepad, edit一个勉强 合格的替代品. 第三个阶段, 精益求精的你不满足于无休无止的简单操作, 冗长而 乏味, 有没有更好的办法可以驭繁于简? 于是, 从UNIX参考手册上, 从 同事口中, 你渐渐叩开:help xxx的大门. 开始探索里面充满魔力的咒 语. 从杂耍般的带有表演性质的技巧开始, 这些技巧令人眩目但少有实 用性. 不过这却是你拥有魔力的第一步. 接下来, 你开始认识到这些 咒语背后的真经, 开始偷偷修改一些奇怪的符号, 于是, 奇迹产生了, 魔力不但仍然有效, 而且真实地作用于你现实中的文字编辑生活. 你 2 3 前言 在第二阶段由于熟练操作而尘封已久的大脑突然开始运作. 但这个过 程并非是达到某个临界状态后的一路坦途, 不断的挫折, 新的挑战, 看 似Mission Impossible的任务. 永远伴随着任何一个人的任何一个学习 过程. 这是你使用Vim的最后一个阶段, 也是最漫长最有挑战性同时也 充满无数奇趣的阶段. 这个阶段里你开始定制一些希奇古怪的颜色. 开始以敲入i18n来输入internationalization, 开始让Vim替你纠正经常 把the 误敲成teh的毛病, 开始让Vim与系统里各种精悍而强大的兄弟工具 进行合作, 开始写越来越长的script, 每一次的文本编辑体验都妙趣横 生高潮跌起. 你的头脑因为要用Vim完成高效的编辑而高度紧张. 你开始 在Vim邮件列表里提一些确实是问题的问题. 也开始发现你在Vim里做了以 前在SHELL里做的几乎一切事. 事实上你已经成了一个无可救药的Vim骨 灰级玩家.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值