VIM 教程文档的学习
原文:http://vimcdoc.sourceforge.net/
文章目录
- 词移动
- 移动到一个指定的字符
- 括号匹配
- 移动指定行
- 滚屏
- 搜索
- 简答的查找模式
- 匹配特殊字符
- 标记
- 其它
- 操作符
- 可视模式
- 按行选择
- 列块选择
- 移动文本
- 拷贝文本
- 替换模式
- 小结
- `vimrc` 实例解释
- 简单的键盘映射
- VIM 插件
- 选项窗口
- 显 示 TAB 键
- 编辑多个文件
- 文件列表
- 文 件 标 记
- 使 用 寄 存 器
- 显示文件
- 分隔窗口
- 关 闭 窗 口
- 关 闭 所 有 其 它 窗 口
- 用另一个文件分割窗口
- 窗口大小
- 垂直分割
- 在 窗 口 间 跳 转
- 移动窗口
- 用 vimdiff 显示文件差异
- 标签页
- 可视列块模式
- 插 入 文 本
- 修 改 文 本
- 以 一 个 字 符 填 充
- 查找文件
- 加密
- 补 全 源 代 码
:help turor进入中文教程。
- 在VIM 中你可以使用
J
来把两行连起来。意味着删去两行之间的空格。 - dw to make the word disappear
- d$ to delete to the end of the line.
- 指定计数
- 向上移动9行,可以输入
kkkkkkkkk
也可以使用9k
来代替 - 也可以在很多命令前面加数字,计数9代表的是将后面的命令执行多少次。比如
3x
代表删除3个字符。 - 计数总放到要处理命令的前面
- 向上移动9行,可以输入
- 如果放弃修改后还想重新编辑,使用
e!
来重新加载文件
词移动
w
移到下一个单词的词头,b
移动到上一个单词的词头。e
移动到下一个单词的词末,ge
移动到上一个单词的词末。大写字母可以用来移动字符串。而不是一个单词。
[外链图片转存失败(img-jOLgRfaB-1568813927681)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1568298376329.png)]
移动到一个指定的字符
- 本行字符查找命令
fx
,f:查找命令,x:待查找的字符 3fl
表示,查找本行中第三次出现字符l
的位置f
表示向右查找,F
表示向左查找。
括号匹配
%
跳转到对应()[]{}
的位置
移动指定行
33G
跳转到指定行
50%
移动到文件的中间
99%
移动到文件的尾部
滚屏
当使用j
向下滚动时,光标是在底部的,如果希望光标在中间可以使用zz
,对应的光标在底部zb
,顶部zt
搜索
使用/
来启动查找对应的字符串。查找方式是正向查找。
使用?
为反向查找。
N
查找下一个匹配对象。
简答的查找模式
^
匹配行头
$
匹配行末
.
匹配任意单个字符,比如c.m
,将匹配。“com became cumin”
匹配特殊字符
如果你想匹配点字符。可以在.
前添加一个\
进行转义。eg: ter\.
标记
自定义标记位置,使用m+[a-z]
,二十六个字母。来标记26个位置。eg:ma
,标记当前位置。使用``a`,跳转到这位置。
使用:marks
,来查看当前标记列表。当然有一些特殊标记。
你会注意到有一些特殊的标记,包括:
' 跳转前的光标位置" 最后编辑的光标位置[ 最后修改的开始位置] 最后修改的结束位置
其它
使用:edit + 文件名
,在当前vim窗口中编辑文件
操作符
操作符+动作:首先输入一个操作符命令,然后再附加一个动作命令。d$
另一个操作符c
,单独一个c
,没有什么作用。如果是cw
的作用则是,删除光标所在的一个单词。如果光标在空格上,则会删除一个空格。并进入输入模式。比如:cc
,删除一整行并进入输入模式。c$
,删除当前行到末尾,并进入输入模式。等同于d$a
.
重复一个修改,它重复最后一个修改工作。
dw
命令为删除一个单词。dfm
表示删除一个单词中所有的m
。f
意味的查找。dfm
意味着删除当前单词中所有找到的m
。
可视模式
按行选择
使用V
进入可视模式。使用Vjj
,选中三行内容。
列块选择
CTRL-V
启用列块模式。
移动文本
当使用d
,x
命令删除的字符
拷贝文本
关键字为y
,对应的配合有yw,yy,y$
替换模式
R
会进行替换模式,你输入的每一个字符都会替换当前光标上的字符。直到Esc
,退出这个模式
雷同于Insert
按键,当你使用BackSpace
按键时,原来被替换的字符又回来了。
小结
[外链图片转存失败(img-d35KGIOV-1568813927683)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1568534405393.png)]
vimrc
实例解释
文件类型探测
使用文件类型相关的插件
使用缩进文件
autocmd FileType text setlocal textwidth=78
autocmd FileType text
定义自动命令,表示当文件类型被设置为text
时,后面的命令自动执行。textwidth
选项为78,表示在一行长于 78 个字符的时候自动换行。
简单的键盘映射
映射可以把你一系列的VIM命令绑定为一个单独的按键。假设你要用一个大括号将一个特定的单词括起来。例如,将“amount”变成“{amount}”。用“:map”命令,就可以让F5来完成这个动作。命令如下:
map <F5> i{<Esc>ea}<Esc>
分解一下命令:
<F5> F5 功能键。这是命令的触发器。当这个键被按下时,相应的命令即被执行。i{<Esc> 插入 { 字符。<Esc> 键用于退出插入模式。e 移动到词尾。a}<Esc> 插入 } 到单词尾。
执行 “:map” 命令后,要在单词两端加上 {},只需要移到单词的第一个字符上并按 F5。
在这个例子中,触发器是单独一个键;它还可以是任何字符串。但若你使用一个已经存在
的 Vim 命令,该命令将不再有效。最好避免出现这种情况。
一个可用于映射的键是反斜杠。因为你很可能想定义多个映射,那就加上另一个字
符。你可以映射 “\p” 为在单词两端加圆括号,而映射 “\c” 为加花括号,例如:
:map \p i(<Esc>ea)<Esc>:map \c i{<Esc>ea}<Esc>
你需要在敲入 \ 后,立即敲入 p,以便 Vim 知道它们组成一个命令。
VIM 插件
选项窗口
如果要找一个选项,你可以在这里寻找帮助:options。另一个方法是用如下命令:
:options
这会打开一个新窗口,其中给出一个选项的列表,并对每个选项提供一行解释。这些选项
根据种类分组。将光标移到一个主题上然后按 就可以跳转到那里。再按一下
或者 CTRL-O 就可以跳回来。
你可以通过这个窗口改变一个选项的值。例如,移到 “displaying text” 主题。然后把
光标下移到这一行:
set wrap nowrap
当你在上面键入回车,这行会改变为:
set nowrap wrap
现在,这个选项被关闭了。
这行的上方是对这个选项的简要描述。将光标向上移动一行,然后按 ,你可以跳
转到 ‘wrap’ 的完整帮助,再用 CTRL-O 可以跳回来。
对于那些值为数值或者字符串的选项,你可以编辑它的值,然后按 来启用该
值。例如,把光标移动到下面这行:
set so=0
用 $ 移到行尾,再用 “r5” 命令修改为五,然后按 使修改生效。现在如果你移
动一下光标,你会发现在你的光标移到窗口边界前,你的文字就开始滚动了。这就是选项 ‘scrolloff’ 完成的功能:它指定在距离边界多远的地方开始滚动文字。
显 示 TAB 键
文件中有 TAB 键的时候,你是看不见的。要把它显示出来:
:set list
现在 TAB 键显示为 ^I,而 $显示在每行的结尾,以便你能找到可能会被你忽略的空白字
符在哪里。
这样做的一个缺点是在有很多 TAB 的时候看起来很丑。如果你使用一个有颜色的终
端,或者使用 GUI 模式,Vim 可以用高亮显示空格和 TAB。使用 ‘listchars’ 选项:
:set listchars=tab:>-,trail:-
现在,TAB 会被显示成 “>—” ("-" 的个数不定) 而行尾多余的空白字符显示成 “-”。
看起来好多了,是吧? 【个人感觉,超难看】
编辑多个文件
文件列表
你可以在启动 Vim 的时候指定一堆文件。例如:vim one.c two.c three.c
这个命令启动 Vim 并告诉它你要编辑三个文件。Vim 只显示第一个。等你编辑完第一个
以后,用如下命令可以编辑第二个::next
要回到前一个文件::previous
这个命令与 “:next” 相似,只不过它是向相反的方向移动。同样地,这个命令有一个快
捷版本用于 “保存再移动”::wprevious
要移动到列表中的最后一个文件: :last
而要移动到列表中的第一个文件: :first
你可以在 “:next” 和 “:previous” 前面加计数前缀。例如要向后跳两个文件::2next
现在你在 two.c。现在使用 CTRL-^ 回到 one.c。再按一下 CTRL-^ 则回到 two.c。又按
一下 CTRL-^ 你再回到 one.c。如果你现在执行::next
现在你在 three.c。注意 CTRL-^
不会改变你在文件列表中的位置。只有 “:next” 和
“:previous” 才能做到这点。
你编辑的前一个文件称为 “轮换” 文件。如果你启动 Vim 而 CTRL-^ 不起作用,那可能
是因为你没有轮换文件。
文 件 标 记
在第四章,我们介绍过使用 “mx” 命令在文件中增加标记,那只在一个文件中有效。如果
你编辑另一个文件并在那里加了标记,这些标记都是这个文件专用的。这样,每个文件都
有一个自己的标记集,并只能在该文件中使用。
到此为止,我们都用小写字母的标记。实际上还可以使用大写字母标记,这种标记是
全局的,它们可以在任何文件中使用。例如,你在编辑一个文件 “foo.txt”。在文件的中
间 (50%) 并建立一个 J 标记 (J 表示甲):
50%mJ
现在编辑文件 “bar.txt” 并在文件的最后一行放一个标记 Y (Y 表示乙):
GmY
现在你可以使用 “J" 命令跳回到 foo.txt 的中间。或者在另一个文件中输入 "
Y” 跳
回到 bar.txt 的末尾。
文件标记会被一直记住直到被重新定义。这样,你可以在一个文件中留下一个标记,然后
任意做一段时间的编辑,最后用这个标记跳回去。
让文件标记符和对应的位置建立一些关系常常是很有用的。例如,用 H 表示头文件
(Head File),M 表示 Makefile 而 C 表示 C 的代码文件。
要知道一个标记在什么地方,在 “:marks” 命令中加上标记名作为参数即可:
:marks
使 用 寄 存 器
当你需要拷贝一个文件的几个地方到另一个文件,用上面的方法,你就得反复在两个文件
间跳来跳去。要避免这种情况,你可以把不同的文本拷贝到不同的寄存器中。
寄存器是 Vim 用来保存文本的地方。这里我们使用名称为 a 到 z 的寄存器 (后面
我们会发现还有其它寄存器)。
先知道有这个玩意吧
显示文件
有时,你只是想查看一个文件,而没打算修改它。有一个风险是你想都没想就输入了一个
“w” 命令。要避免这个问题,以只读模式编辑这个文件。
要用只读模式启动 Vim,可以使用这个命令:vim -R file
在 Unix,如下命令可以完成相同的功能:view file
现在,你就在用只读模式阅读这个文件 “file” 了。但你执行 “:w” 命令的时候,你会得
到一个禁止写入的错误信息。
当你试图修改这个文件时,Vim 会给你一个告警提示:
W10: Warning: Changing a readonly file
即使这样,你的修改还是会被接纳的。有可能你只是想排列这些文本,以便阅读。
如果你确实要改动这个文件,在 write 命令前面加上 ! 可以强制写入。
如果你的确想禁止文件修改,用这个命令:vim -M file
分隔窗口
打开新窗口最简单的命令如下::split
这个命令把屏幕分解成两个窗口并把光标置于上面的窗口中
关 闭 窗 口
以下命令用于关闭窗口::close
实际上,任何退出编辑的命令都可以关闭窗口,象 “:quit” 和 “ZZ” 等。但 “close” 可
以避免你在剩下一个窗口的时候不小心退出 Vim 了。
关 闭 所 有 其 它 窗 口
如果你已经打开了一整套窗口,但现在只想编辑其中一个,如下命令可以完成这个功能::only
用另一个文件分割窗口
下面命令打开另一个窗口并用该窗口编辑另一个指定的文件:
:split two.c
窗口大小
:split 命令可以接受计数前缀。如果指定了这个前缀,这个数将作为窗口的高度。例如
如下命令可以打开一个三行的窗口并编辑文件 alpha.c:
:3split alpha.c
对于已经打开的窗口,你可以用有几种方法改变它的大小。如果你有鼠标,很简单:把鼠
标指针移到分割两个窗口的状态栏上,上下拖动即可。
要扩大窗口CTRL-W +
要缩小窗口:CTRL-W -
这两个命令接受计数前缀用于指定扩大和缩小的行数。所以 “4 CTRL-W +” 会使窗口增高
4 行。
垂直分割
“:split” 命令在当前窗口的上面建立窗口。要在窗口左边打开新窗口,用这个命令 :vsplit
或者 :vsplit two.c
在 窗 口 间 跳 转
由于你可以用垂直分割和水平分割命令打开任意多的窗口,你就能够任意设置窗口的布
局。接着,你可以用下面的命令在窗口之间跳转:
CTRL-W h 跳转到左边的窗口
CTRL-W j 跳转到下面的窗口
CTRL-W k 跳转到上面的窗口
CTRL-W l 跳转到右边的窗口
CTRL-W t 跳转到最顶上的窗口
CTRL-W b 跳转到最底下的窗口
你可能已经注意到这里使用移动光标一样的命令用于跳转窗口。如果你喜欢,改用方向
键也行。
移动窗口
CTRL-W H 把当前窗口移到最左边
CTRL-W J 把当前窗口移到最下边
CTRL-W L 把当前窗口移到最右边
用 vimdiff 显示文件差异
有一种特殊的启动 Vim 的方法可以用来显示两个文件的差异。让我们打开一个 “main.c”
并插入一些字符。在设置了 ‘backup’ 选项的情况下保存这个文件,以便产生 “main.c~”
备份文件。
在命令行中输入如下命令:(不是在 Vim 中)
vimdiff main.c~ main.c
Vim 会用垂直分割的方式打开两个文件。你只能看到你修改过的地方和上下几行的地方。
标签页
你会注意到窗口永远不会重叠。这意味着屏幕空间很快会用完。这个问题的解决方法叫做
标签页。
假设你正在编辑文件 “thisfile”。下面的命令可以建立新的标签页:
:tabedit thatfile
这会在一个窗口中编辑文件 “thatfile”,这个窗口会占满整个 Vim 窗口
你可以通过单击顶端的标签切换标签页。如果没有鼠标或者不想用它,可以使用 “gt” 命
令。助记符:Goto Tab。
在任何打开窗口的 Ex 命令前面,你都可以放上 “:tab”。这个窗口在新标签页中打开。
另一个例子:
:tab help gt
它将在新的标签页中显示关于 “gt” 的帮助。
使用标签页可以完成更多的工作:
在末尾标签后面的空白处单击鼠标
选择下个标签页,同 “gt”。在右上角的 “X” 处单击鼠标
关闭当前标签页,除非当前标签页中的改变没有保存。在标签行上双击鼠标
建立新标签页。“tabonly” 命令
关闭除了当前标签页以外的所有标签页,除非其它标签页中的改变没有保存。
可视列块模式
插 入 文 本
你用 CTRL-V 进入可视列块模式,然后移动光标定义一个列块。接着输入 I 进入插入模式,并随后输入文
本。这时,你输入的内容只出现在第一行。 然后你输入 结束输入,刚才输入的字符串将神奇地出现在每一行的可视区的左边。
如果选中的块经过一个短行,并且这行没有任何内容包括在可视列块中,则新的文本不会
被插入到该行中。如下。
This is a long line
short
Any other long line^^^^ 用可视列块选中的部分
“A” 命令的效果与 “I” 命令一样,只是把文字插入可视列块的右边,而且在短行中会插
入文字。
修 改 文 本
可视列块中的 “c” 命令会删除整个可视列块并转入 “插入” 模式,使你可以开始文本,
这些文本会被插入可视列块经过的每一行。
与 “I” 命令一样,短行不会发生变化。
以 一 个 字 符 填 充
要以某一个字符完全填充整个块,可以使用 “r” 命令。再次选中上例中的文本,然后键
入 “rx”:
查找文件
假定现在你在编辑一个 C 程序,该程序有这样7行:
#include “inits.h”
你想要查看文件 “inits.h” 里有些什么。把光标移到该文件名上,并键入:
gf
Vim 就会找到并打当这个文件。
那么,如果该文件不在当前目录里怎么办?Vim 将利用 ’path’ 选项来寻找这个文
件。该选项是/系列目录名,Vim 会在其中为你寻找文件。
假设你把你的头文件存放在目录 “c:/prog/include” 里。下面这个命令把该目录加入
’path’ 选项:
:set path+=c:/prog/include
这个目录名是/绝对路径。不管你在哪儿,它都指向同 目录。如果你已经知道要编辑的
文件位于当前文件所在目录下某个子目录里,你该怎么办呢?那样的话,你可以指定一个
相对路径。相对路径以 “.” " 始:
加密
有些信息你希望保留给自己。例如,当你在计算机上写一份给学生用的试卷。你不会愿意
在考试开始之前给聪明的学生琢磨出偷阅试题的方法。Vim 能为你给文件加密,为你
提供一些保护。
要开始编辑一个* 要加密的新文件,可以用 “-x” 参数来启动 Vim。例如:
vim -x exam.txt
Vim 提示你确定一个密码,用于为文件加密和解密:
如果你试图用另一个程序来阅读这个文件,你将读到丰堆垃圾。如果你用 Vim 来编辑
这个文件,但输入了错误的密码,但是可以编辑这个文本。
补 全 源 代 码
源代码文件有良好的结构。这使通过某种智能方式补全成为可能。在 Vim 中,这被称为
全能补全。在其他编辑器中,它被称为智能补全(intellisense),但这是一个注册商标。
全能补全的热键是 CTRL-X CTRL-O
。显然,O 在这里代表全能 (Omni),这样方便我们记
忆。让我们以编辑 C 程序为例:
*{* ~struct foo *p; ~p-*>* ~`
光标在 “p->” 之后。现在键入 CTRL-X CTRL-O
。
为使全能补全工作, 要做一些初始化。起码,要保证打当文件类型插件。你的 vimrc
文件应该包含形如:
filetype plugin on
或:
filetype plugin indent on
VIM 教程文档的学习相关推荐
- ps免费学习资料,教程文档
ps免费学习资料,教程文档 马上扫码关注公众号 发送"ps文档" 获取免费资料吧!
- Intel技术教程文档【持续更新】
基于英特尔架构的AI与HPC融合应用实践 [教程地址] OpenVINO工具介绍与PaddleX高性能工业质检方案实践 [教程地址] Intel 边缘计算云开发平台 & 英特尔功能介绍与案例分 ...
- webpack搭建vue项目开发环境【文档向学习】
为何有这篇文章 各个社区已经有无数篇帖子介绍如何使用webpack搭建前端项目,但无论是出于学习webpack的目的还是为了解决工作实际需要都面临着一个现实问题,那就是版本更新.别人的帖子可能刚写好版 ...
- 【转】(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration
原创至上,移步请戳:(六)unity4.6Ugui中文教程文档-------概要-UGUI Animation Integration 5.Animation Integration(动画集成) 动画 ...
- jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。
jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档. jquery.cookie中的操作: jquery.cookie.js是一个基于jquer ...
- atitit.微信支付的教程文档 attilax总结
atitit.微信支付的教程文档 attilax总结 1. 支付流程概览 1 2. 设置支付起始目录 host/app/paydir/ 1 3. 设置oauth验证域名 1 4. 测试目录 可以使 ...
- 【转】(五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components
原创至上,移步请戳:(五)unity4.6Ugui中文教程文档-------概要-UGUI Interaction Components 4.Interaction Components 本节涵盖了处 ...
- vim 写文档 (自身功能tags, txt2tags生成网页pdf等)
Table of Contents Vim进阶索引[7]::TAGS 1 基本的tags用法 2 tags文件格式 3 相关命令 4 tags进阶 4.1 编写/转换为Vim文档 4.2 exuber ...
- VIM快速文档整理技巧
VIM整理文档具有非常好的效果,我最近由于开发的需要,在网上收集了大量有关中中医的文章,需要整理优化调整成需要的格式,存入数据库中供前端调用.使用过WORD,excel等工具都不尽如意,后来使用VIM ...
最新文章
- struts2的文件上传和文件下载
- 解决push的时候有时候会卡一下的问题
- javascript中使用重载
- bzoj3714:[PA2014]Kuglarz
- alert中添加表格_Excel设置表格边框的几种方法,还有自动添加边框哟
- java中白盒测试用例_基于JAVA开发的中国象棋游戏的开发与研究白盒测试用例.doc...
- webpack2 实践系列(二)— entry 和 output
- Apache Maven 3.0.3 (yum) 安裝 (CentOS 6.4 x64)
- jenkins插件更换源_jenkins快速入门,自动构建一个hello world项目(devops,ci/cd)
- Windows 8 Directx 开发学习笔记(十)纹理贴图实现旋转的木箱
- HDU4508 完全背包
- hdu 1233还是畅通工程 最小生成树(入门题)prim算法
- [译]记一次Kotlin官方文档翻译的PR(内联类)
- Kettle 添加备注
- php远程下载头像,Laravel 项目中 远程把图片下载到本地
- STM32F207核心版的LwIP例程的心得
- matlab演奏《起风了》代码
- 解决问题:ImportError: The 'enchant' C library was not found. Please install it via your OS package manag
- 元神一直显示连接服务器失败,原神连接服务器失败怎么办
- 性价比很高的三款ePUB阅读器(转载)
热门文章
- 今年的 WWDC 2017 为我们带来了什么?
- 华为机试HJ53:杨辉三角的变形
- 2021-10-09 将多张电子发票pdf合并成一个pdf文件
- 微信小程序语音识别、语音合成(微信同声传译)使用代码实例
- Java微信语音amr格式转mp3格式
- Cesium|xt3d旋转椎体
- 基于单片机技术的自动停车器的设计
- 第3章 Linux系统介绍与虚拟环境的准备
- CDH FAILED: SemanticException 81:5 Schema of both sides of union should match:
- 如何用python做表_如何使用Python中的Tkinter制作钟表?