Vim 学习资源整理+常用指令

Vim 入门教程

Vim 学习资源整理收集

转载自;https://github.com/vim-china/hello-vim/graphs/contributors

常用链接

书名叫“指北”而不是“指南”,主要是考虑有很多指南类 书籍讲 vim 这编辑器工具的使用,而本书则侧重于 VimL 这种脚本语言编程。
全书正文分十章,约摸可再划分为基础篇、中级篇与高级篇三部分,现已完成初稿。后面 有可以计划再补上番外实战篇,写几章开发具体插件实例的实现思路。

发布于 IBM Developer 的三篇 Vim 教程,作者:吴咏炜

同时提供了 PDF 版本下载。

《Vim Practice》 - 李鼎(哲良), 一篇不错的 Vim 入门教程

知乎专栏

虽然每篇文章篇幅比较小,但是还算是比较系统滴介绍 Vim 的使用,作者更新也比较稳定。

从想法到脚本实现的详细过程

文章推荐


如需添加内容,欢迎提交 PR,或者邮件发送给:vim-china@googlegroups.com

转载自:https://github.com/vim-china/hello-vim/graphs/contributors

Vim 的教程相对比较零散,系统的教程比较少,我也阅读过不少教程,走过很
多弯路。借着 Vim-china 组织组建这一契机,整理下自己学习过的内容,
分享给大家。如有任何问题,可以提交issue进行讨论.

简介

Vim 是一款开源的模式化文本编辑器,项目源码公开在 Github。Windows 用户
可以从此下载最新的每日构建版: vim-win32-installer

如何退出 vim

别紧张。确保你使用的是英文输入法,然后按如下顺序敲击键盘:

  1. 按一下 ESC
  2. 输入一个 :
  3. 输入一个 q
  4. 输入一个 !
  5. 按一下回车,即键盘上的 Enter

做得很好,你已经安全了。

什么是模式

Vim 不同于其他编辑器的主要特点就是模式化。什么叫做模式化?可以理解为
编辑器的一种状态,不同的状态下对用户的输入采取不同的响应方式。比较常
见的模式有 Normal(普通模式),Insert(插入模式)和 Visual(可视模式)。

Vim 打开是默认的模式是 Normal 模式,在这一模式下,按键不能直接将字符插入至文件,而是执行各种命令。比如 h 按键不是输入字符 h,而是将光标
向左移动一个字符位置。

插入模式,顾名思义,在这个模式下,按键的字符是直接插入的。

可视模式,这一模式有点类似于在普通编辑器里按住鼠标左键移动鼠标,即进行选择。

如何在模式之间切换

普通模式是 Vim 默认模式,任何模式下通过 <ESC> 按键都可以切换到普通模式。
普通模式想要切换到插入模式,方法有很多。比较常用的按键如下:

按键 描述 助记
i 在当前光标字符前插入 insert
a 在当前光标字符后插入 append
I 在当前行首插入 Insert
A 在当前行尾插入 Append
o 在下方开一新行,插入 open
O 在上方开一新行,插入 Open

普通模式切换到可视模式,按键就比较单一了,比较常用的是:

按键 描述 助记
v 选中当前光标字符,并进入可视模式 visual
V 不同于小写 v,这时移动光标只会按行选择 Visual
<Ctrl-v> 块选择模式,此时移动光标会选择一个矩形块

可视模式切换到输入模式一般有以下几种情况:

按键 描述 助记
s 删除当前已选择的内容,并进入插入模式
c 删除当前已选择的内容,并进入插入模式 change
di 删除当前已选择的内容,并进入插入模式

可视模式回到普通模式也有很多方式,比较直接的就是<ESC>,当然,还有其他一些按键:

按键 描述 助记
y 复制当前选择区域,并退出可视模式 yank
Y 复制当前选择区域(按行),并退出可视模式 Yank

基本概念

Vim 的各种命令是可以灵活组合变通的,命令是解决问题的手段。

基本操作

移动命令

Vim 的各种移动命令主要是在 Normal 模式下。最基本的移动命令是光标的上下
左右移动,当然,你可以使用方向键,但是我想更多的 Vim 用户比较喜欢使用
h、j、k、l 按键。

按键 描述
h 光标左移
j 光标下移
k 光标上移
l 光标右移

学会了这四个移动命令,你就可以自由地移动你的光标了,开始尽情地上下左右!

慢着,一个光标一个光标移动多慢啊,电脑上的其他编辑器可以鼠标定位,
还有那么多触控设备可以直接定位光标,用 Vim 的用户难道是慢吞吞的乌龟么?

还记得一开始说的灵活使用命令么?你可以输入“数字+移动命令”,一次性进行多次移动。

按键 描述
n+h 光标左移 n 个位置 ,n(umber) 指数字
n+j 光标下移 n 个位置 ,n(umber) 指数字
n+k 光标上移 n 个位置 ,n(umber) 指数字
n+l 光标右移 n 个位置 ,n(umber) 指数字

带上了数字后,你发现光标健步如飞,仿佛穿上了跑鞋:)

开放思想,当你编辑一个小文件时,正好光标在一行中部,你想跳到行首,你可以99h
当你在文件中部,你可以99k跳到第一行,同理其他移动命令来达成行尾、末行的效果。

但如果一个文件有几万行几万列,我们也这样输入一个无穷大的数字来跳转么?

放心,Vim 已经内置了这些该有的命令。

当然 Vim 还有其他常用的移动光标的按键:

按键 描述 助记
0 跳到行首,可以理解为无穷大的h
^ 跳到行首开始的第一个非空白字符
$ 跳到行尾,可以理解为无穷大的l
gg 跳到首行,可以理解为无穷大的k
G 跳到末行,可以理解为无穷大的j
w 跳到下一个词首 word
b 跳到上一个词首 back-word
e 跳到下一个词尾 end
ge 跳到上一个词尾

词间跳转中,“上一个词首”的精确断句为“上一个/词首”,即如果当前光标不在词首,则跳到本词词首;
如果当前光标已经在词首,才跳到上一个词的词首。
“下一个词尾”与此类似。

词间跳转也是支持“数字+移动命令”的,比如输入 5w 可以向后移动 5 个词。

除了 Normal 模式,移动命令也可以在可视模式下使用。
在可视模式下移动光标时,从进入可视模式时的光标位置移动后的光标位置之间的文本将会被选中。

操作命令

编辑文档的过程,实际上就是不断操作特定文本的过程:删除、修改、复制,等等。
Vim 下的操作命令(Operator Commands)即特指一系列针对特定文本的操作。
常用的操作命令包括:

按键 描述 助记
c 删除,并进入插入模式 change
d 删除 delete
y 复制 yank
gu 变为小写字母
gU 变为大写字母
g~ 颠倒字母的大小写
> 右缩进
< 左缩进
= 自动缩进

你可能会问,那怎么指定这些操作命令作用的文本对象呢?

操作命令+移动命令

记住我们刚开始所说的,Vim 的各种命令都是可以灵活组合变通的!
操作特定文本,Vim 的解决方案是"操作命令+移动命令",
即操作命令的对象由移动命令来指定,举例:

  • dl:向右删除一个字符(删除当下字符,右侧字符不会被删);
  • dh:向左删除一个字符(删除左侧字符,当下字符不会被删);
  • d3l:向右删除 3 个字符(3dl 亦有相同效果,下同);
  • d3w:删除文本至右侧第三个词首之前;
  • de:删除当下字符至下一个词尾;
  • y2w:复制当下位置至右侧第二个词首之间的文本;
  • gUe:将当下字符至下一个词尾变成大写;

其他请以此类推。你会发现,由于操作命令和移动命令的多种多样,能够组合出来的文本操作也是多种多样。
再结合数字,可以实现的功能就更强大了。

需要注意的是,一个操作命令只会对紧随其后的一个移动命令有效。所以 dll 的作用是
“向右删除一个字符后再右移一位”,而不是“向右删除两个字符”。
如果要实现“向右删除两个字符”,应使用 d2l
2l 虽然相当于移动两次,当应视为单个移动命令(因为单独一个数字不构成一个完整命令)。

操作命令二连击 = 行操作

针对一整行的操作是很常见的。
比如,如果要删除一整行,应该如何操作呢?
根据上面的讲解,你可能会回答:先用 0 回到行首,再用 d$ 删至行尾。
这未免显得繁琐了些。而且,这只是删除了行内字符,并没有将整行删掉。

Vim 提供了“操作命令二连击”的方式来实现真正的行操作:

按键 描述
cc 删除整行,并进入 insert (插入)模式
dd 删除整行
yy 复制整行
guu/gugu 整行变为小写字母
gUU/gUgU 整行变为大写字母
g~~/g~g~ 颠倒整行字母的大小写
>> 行右缩进
<< 行左缩进
== 行自动缩进

可视模式下操作命令

可视模式下使用操作命令则直观得多。
进入可视模式,用移动命令选择文本,再键入操作命令,指定的操作就会作用在选中文本上。
操作完成后,会自动退回 Normal 模式。

可视模式下“移动指令+操作指令”,和 Normal 模式下“操作指令+移动指令”,各有利弊。

Normal 模式的好处显而易见,不用切换模式,更快捷。

可视模式的好处是操作对象更精准可控,因为选中的文本会被高亮;
相比之下,Normal 模式下就有点“黑灯瞎火”的感觉,如果移动指令稍微有点复杂,就易出错
(比如 d7w,词数太多很可能数错)。
此外,Normal 模式下,操作命令对光标移动的起始和终末字符是否生效,容易产生混淆,比如
de 会连包括词尾在内的字符一起删掉,而 dw 却是删到下一个词首之前的字符为止。

总之,完成一种操作,在 Vim 下往往有多种解决方案,应在实践中找到适合自己的最佳方案。

更多常用命令

上述操作命令在 Normal 模式都无法单独生效,需要二连击或者配合移动指令之类才能起作用。

Normal 模式下“一击即中”的常用命令则包括:

按键 描述 助记
p 粘贴于当前光标之后 paste/put
P 粘贴于当前光标之前 Paste/Put
x 删除当前字符,相当于 dl
s 删除当前字符并插入,相当于 cl
C 删除至行尾并插入,相当于 c$
D 删除至行尾
S 从当前行首个非空字符删除至行尾并插入,相当于 ^C
u 撤销上一次修改 undo
<Ctrl-r> 重做上一次修改,u 的逆过程 redo
. 在当前光标处重复上一次修改

一个小思考题:d2wdw. 都可以实现相同的效果,它们本质上一样吗?
如果它们之后跟着一个 u.,效果有什么不同?
考虑一下,如果你要删除接连几个词,大概会使用怎样的键入组合。

对了,重做命令是 <Ctrl-r> 而非 r,因为 r 被另一个常用命令占用了,即替代命令:

按键 描述 助记
r 替代字符,将当前字符替代为紧跟着输入的字符 replace
R 进入替代模式,将当前及之后的字符都替代为紧跟着输入的字符串,直到按 <Esc> 返回 Normal 模式 Replace

原文地址:https://www.cnblogs.com/60kmph/p/14051542.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全局的情况下:即所有用户都能用这个配置文件地址:/etc/vimrc在文件中添加:setfileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936settermencoding=utf-8setencoding=utf-8如果只修改个人的vim配置情况:需要把/etc/
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。相关文章:史上最全Vim快捷键键位图—入门到进阶什么是vim
      vim正则匹配:空行:/^$/  /^[\t]*$/注释行:/^#/ /^[\t]*#/:1,$s/\([Rr]\)oot/\1ename/:1,$s/\(square\)and\(fair\)/\2and\1/ 
$select-editorSelectaneditor.Tochangelater,run'select-editor'.1./bin/ed2./binano<----easiest3./usr/bin/code4./usr/bin/vim.basic5./usr/bin/vim.tinyChoose1-5[2]:4
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下预览图安装工具:u盘、manjarokdeminimal20.0.3、win32DiskImager提取码:qt9f进bios、选择u盘启动、改语言、改时区、挂载分区(文件系统ext4、在200M左右的一个FAT分区上挂载/boot/efi)、安装安装很简单,按提示
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置vi文本编译器,其他的文本编译器则不一定存在很多软件的编译接口都会主动调用vivim有很强的程序编译能力,可以主动的一字体颜色辨别语法的正确性,方便程序设计因为程序简单,编译速度相当快vi的使用一般命令模
主机名字太长,怎么修改?  1.sudovim/etc/hostname 修改内容为wel,  本地主机名 2.sudovim/etc/hosts      修改主机名为wel,用于网络连接中主机名的识别 3.reboot 
目录#事故现场#事故原因#解决方法方法一:使用notepad转换方法二:使用vscode转换方法三:使用vim转换#参考#事故现场执行shell脚本文件,报错::notfound.sh:6:coreinstall.sh:查看脚本文件第6行,发现是空行;#事故原因window下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n
1、保存并退出linux下安装好了vim以及gcc后,我们开始新建一个c文件,例如:vimtest.c之后进入vim的编辑框中,点击i进入插入模式,开始编辑程序,当你编写好自己的程序之后,按Esc退出插入编辑状态,然后输入冒号加wq,点击Enter即可,完整的命令如下:wq如下图:  退出后,如果想要编译
概述使用VIM作简单字数统计背景想做一个简单的字数统计环境OSwin10shellmintty-2.9.41.需求概述需求需求统计文段内字符的数量支持自定义字符集2.方案1:vim自带统计概述vim自带方案操作定位到文段内某行vi
经典版下面这个键位图应该是大家最常看见的经典版了。对应的简体中文版其实经典版是一系列的入门教程键位图的组合结果,下面是不同编辑模式下的键位图。 
ssh是一个安全连接协议。作用两个:1.远程连接协议,2.远程文件传输协议协议默认端口为:22。 修改默认端口,再到ssh服务配置文件位置  vim/etc/ssh/ssh_config这条命令就可以修改了。按下ESC键,再输入:x 也可以退出vim。(和:q! 相同)修改注意:1.端口号在0-65535之间。2.别人
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢
在Vim中,有时需要将tab转换成space。使用ret命令(replacetab)。[range]ret[ab]![new-tabstop]举例:将第一行到文件尾的tab转换成space,每个tab用4个space替代。:setexpandtab:%ret!4如果没有给定4,则用当前的tab宽度设定替换为space。 相关配置文件命令::settabstop=4设
分屏命令记不得文件名就输入.可浏览文件命令英文功能:sp[文件名]split横向分屏:vsp[文件名]verticalsplit纵向分屏    切换分屏窗口先按Ctrlw切换窗口命令英文功能 wwindow切换下一个窗口 rreverse互换窗口 c
1查看ctags支持的语言ctags--list-languages2查看语言和扩展名的对应关系ctags--list-maps 3对当前目录下所有ctags支持的语言格式文件生成tagsctags-R*缺点很明显,tags会非常大,tags生成会非常慢,而且代码跳转会卡顿。4只对特定文件生成tagsctags`find-name"*.h"`ct
vim基本命令 $vimtutor可以查看基本的vim操作1h(left)j(down)k(up)l(right)q!wqi:insertbeforethecursor(insert)插队嘛,肯定在光标前面A:appendaftertheline(appending)2dw:删除一个单词,保留光标前面部分d$:删除光标之后的同行
~/.vimrc内容如下:setnocompatiblefiletypeoffsetrtp+=~/.vim/bundle/Vundle.vimcallvundle#begin()Plugin'VundleVim/Vundle.vim'Plugin'tpope/vim-fugitive'Plugin'tpope/vim-unimpaired'Plugin'tpope/vim-repeat'Plu
程序:硬盘静态的代码  占用磁盘空间进程:内存运行计算的代码 占用CPU运行内存父进程与子进程  树型结构进程唯一标识: PID僵尸进程找到父进程杀掉  孤儿进程疯狂要内存  危害大 pstree [选项]-a显示完整命令行   -p 查看PID [PID或用户
~/.vimrc"Configurationfileforvimsetmodelines=0 "CVE-2007-2438setnumber"setrelativenumber"显示相对行号(这个非常重要,慢慢体会)setcursorlinesetcursorcolumnsetrulersetscrollbindsetencoding=utf-8colormolokaisyntaxon"开启