Vim 学习文档

模式

六种基本模式


  • 普通模式: 使用编辑器命令, 可以移动光标, 删除文本等操作.
  • 插入模式: 可以向文档缓冲插入文本, 可以使用Esc/Ctrl+[按键返回普通模式.
  • 可视模式: 移动命令会扩大高亮的文本区域, 当执行非移动命令时, 命令会执行到这块高亮的区域上.
  • 选择模式: 可以用鼠标或者光标键高亮选择文本, 输入任何字符, vim会用这个字符替换选择的高亮文本块.
  • 命令行模式: :键执行命令, /?键搜索命令, !键过滤命令.
  • Ex模式: 在使用:visual命令下离开Ex模式前, 可以一次执行多条命令.

基础命令

移动(Move)与插入(Insert)命令


移动

  • w按键将光标向下一个单词的开头移动, b按键将光标向每个单词开头移动. 以下都为按键
  • h使光标向左移动, l使光标向右移动, j使光标向下移动, k使光标向上移动.
  • ^/0使光标向行首移动, $使光标向行末移动.
  • 1G/gg使光标向文档首行移动, G使光标向文档末行移动.
  • e键使光标向每个单词的结尾移动.
  • ge使光标向上一个单词的结尾移动.
  • %匹配括号移动, 需要先把光标移动到括号上.
  • *#匹配光标当前所在的单词, 移动光标在这些匹配单词上移动.#是向上移动, *是向下移动

Notice

使用~键可以将光标所在处的字符进行大小写转换.

对于程序变量, 单词由字母, 数字和下划线组成, 可以利用小写的we.

对于程序语句, 单词由blank字符分隔符还有其他分隔符组成, 可以利用大写的EW.

Ctrl+f向下翻页, Ctrl+b向上翻页.

Ctrl+d向下翻半页, Ctrl+u向上翻半页.

Ctrl+e向下滚一行, Ctrl+y向上滚一行.

插入

  • i为普通模式下的插入命令, a为普通模式下的追加命令.
  • I是在光标所在行行首的插入命令, A是在光标所在行末尾的追加命令.
  • o是在光标所在行的下一行插入的命令, O是在光标所在行的上一行插入的命令.
  • cw替换从光标所在位置后到一个单词结尾的字符.包括光标所在的字符

Notice

在Insert模式下, 按下Ctrl+p或者Ctrl+n来自动补齐

Ctrl+a可以使数值每次增加1.

删除命令


普通模式

  • x键删除光标所在的字符. delete同样
  • X键删除光标所在前一个的字符.
  • dd按两次d键删除整行.
  • dw/dnw为删除一个单词或者删除n个单词. 不适用于中文
  • D/d$从光标所在处删除至行尾. 包括光标所在字符
  • d^/d0从光标所在处删除至行首. 不包括光标所在字符
  • dG删除至文档结尾, d1G删除至文档开头.
  • N<command>表示重复N次命令.

Notice: 在普通模式下输入一次删除命令, 再次输入.小数点则会再次重复上一次命令

剪切, 复制和粘贴命令


普通模式剪切

  • dd命令其实就是剪切.
  • ddp命令可以实现快速交换光标所在行与它下面的行.

普通模式复制

  • yy复制光标所在行, 或者Y也可以复制当前行. y=yank
  • y^/y0复制至行首, y$复制至行尾. 是否含有光标所在处字符如同之前的情况
  • yw复制一个单词, ynw复制n个单词.
  • ygg/y1G复制至文档开头, yG复制至文档末尾.
  • ye从当前位置拷贝到本单词的最后一个字符.
  • y2/<word>拷贝2个word之间的字符串.

普通模式粘贴

  • p表示粘贴至光标后或者光标下.
  • P表示粘贴至光标前或者光标上.

Notice: 区别光标后(前)或者光标下(上)的使用, 看复制时是单个词, 还是行.

重复命令

  • n+i+<content>+[Esc]可以使```重复n次.
  • .重复上一个命令, 3.则是重复3次<content>.

保存与退出命令


命令行模式保存

  • :进入命令行模式, 输入w回车, 保存文档. :w <filename>可以将文档另存为其他文件名或者其他路径下.
  • :saveas <filename>为另存为命令.

命令行模式退出

  • :进入命令行模式, 输入q退出, 前提是必须保存.
  • :q!为强制退出, 不保存.
  • :wq!为强制保存并退出.
  • :x为保存并退出.

Notice: 在所有退出命令中加入a(all)可以一次性关闭所有视窗

普通模式退出

  • shift+zz即可保存并退出.

跳转与标记命令


行间跳转

  • nG表示光标移动到第n行. 若没有显示行号, 输入:set nu显示行号
  • :<n>表示跳到n行.

Notice: 在完成一次跳转后, 可以使用ctrl+o快速回到上一次光标所在位置

行内跳转

  • g_到本行最后一个不是blank字符的位置.
  • t,到逗号前的一个字符, 逗号也可以变为其他字符.
  • f<letter>搜索光标所在处之后的第一个字母出现的地方并跳转过去. 可以施加数字用于查找
  • F<letter>搜索光标所在处之前的第一个字母出现的地方并跳转过去.
  • t<letter>搜索光标所在处之后的第一个字母出现的位置并跳转到该位置之前的一个字母.
  • T<letter>搜索光标所在处之后的第一个字母出现的位置并跳转到该位置之后的一个字母.

标记命令

  • ma表示创建一个名为a的标记, 'a(单引号)可以跳到做标记a的行首, `a可以跳转到做标记的位置.
  • 小写字母的标记仅可以用于当前文件, 大写字母的标记可用于不同文件.
  • :marks可以列出所有标记, .是最近编辑过的位置, 0~9是最近使用的文件, ^是最近插入的位置, '为上一次跳转前的位置, "是上一次退出文件时的位置, [是上一次修改的开始处, ]是上一次修改的结尾处.
  • d'a可以删除做过标记a的那一行, y'a可以复制标记a行.
  • :delmarks a b命令, 可以删除某个或者多个标记, :delmarks!可以删除所有标记.

查找和替换命令


查找命令(普通模式)

  • /键进入命令行模式, 输入需要查找的字符串, 回车并向下查找.
  • ?则是向上查找.
  • n为继续向下一个查找, N为继续向上一个查找.
  • \*寻找光标所在处的单词, 并向后(下)寻找; \#则是向前寻找.
  • g\*同上, 但为粗略寻找, 部分符合单词即可.

Notice: 命令行模式输入set hls可以使查找字符高亮, 输入noh回车即可取消搜索

替换和撤销(普通模式)

  • r<letter>将光标所在处的字符替换为指定字符.
  • R进入替换命令.
  • cc替换整行, 即删除光标所在行, 并进入插入模式.
  • C替换光标所在处以及之后至行末.
  • ~反转大小写
  • {n}u撤销一次或者n次操作.
  • U撤销当前行的所有修改.
  • Ctrl+r撤销undo的操作, 即redo.

调整文本命令(普通模式)

  • >>将整行向右缩进.
  • <<将整行向左缩进.
  • 进入命令行模式, 输入shiftwidth/sw对缩进和回退的字符数进行控制. :set shiftwidth=
  • 进入命令行模式, 输入:ce(center)命令使本行内容居中.
  • 同上, 输入:ri(right)命令使本行内容靠右.
  • 同上, 输入:le(left)命令使本行内容靠左.

高级功能

多文件编辑


进入Vim前

默认是进入第一个参数的文件的编辑界面, 命令行模式下输入:n切换到下一个文件, :N切换到上一个文件, 在命令中加入!为强制命令.

1
vim test1.txt test2.txt

进入Vim后(命令行模式)

  • e <filename>打开新文件.
  • e#回到前一个文件.
  • ls列出以前编辑过的文档.
  • b <filename>/<identifier>可以直接进入文件进行编辑.
  • bd <filename>/<identifier>可以删除以前编辑过的列表中的文件.
  • :f显示正在编辑的文件名.
  • :f <filename>改变正在编辑的文件名称.
  • :bn:bp切换至下一个或者上一个文件. 也可以使用:n:N来进行切换

恢复文件

进入文档后, 输入:ewcover <filename>来恢复.

1
vim -r <filename>

可视模式


  • 在普通模式下输入v, 进入字符选择模式, 通过移动光标, 选取字符, 再次按下v就可以取消选取.
  • 在普通模式下输入V, 进入行选择模式, 可以选取整行.
  • 在普通模式下输入Ctrl+v, 进入区域选择模式, 可以进行矩形区域选择. Windows下, 需要按下Ctrl+q
  • 在可视模式下, 输入d删除选取区域内容, 输入y为复制内容.
  • <action>a/i<object>action可以是删除, 拷贝, 可视模式; object可以是单词, 句子, 还有括号等.
  • J将选择的所有行变成一行.
  • </>可以左右缩进.
  • =可以自动给缩进.
1
2
3
4
vi" # 选择引号内的内容, 不包括引号
va" # 选择引号内的内容, 包括引号
vi( # 选择括号内的内容, 不包括括号
v2i( # 选择括号之内的内容, 包括嵌套括号, 不包括最外面的括号

Notice: w一个单词, W一个以空格为分隔的单词, s一个句子, p一个段落.

视窗操作


  • :new打开一个新的Vim视窗, 并进入视窗编辑. 普通模式下输入Ctrl+w, 不推荐
  • :sp <filename>打开新的水平分屏视窗来编辑文件. sp=split
  • :vsp <filename>打开新的垂直分屏视窗来编辑.
  • 普通模式下Ctrl+w s将当前窗口分割成两个水平的窗口.
  • 普通模式下Ctrl+w v将当前窗口分割成两个垂直的窗口.
  • 普通模式下Ctrl+w q 即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符.
  • 普通模式下Ctrl+w o 打开一个视窗并且隐藏之前的所有视窗.
  • 普通模式下Ctrl+w j 移至下面视窗.
  • 普通模式下Ctrl+w k 移至上面视窗.
  • 普通模式下Ctrl+w h 移至左边视窗.
  • 普通模式下Ctrl+w l 移至右边视窗.
  • 普通模式下Ctrl+w J 将当前视窗移至下面. 剩下的同上, 把移动按键大写
  • 普通模式下Ctrl+w - 减小视窗的高度.
  • 普通模式下Ctrl+w + 增加视窗的高度.
  • 普通模式下Ctrl+w _/|可以最大化尺寸, 分别是高度和宽度.

文档加密


输入密码, 接着确认密码, 对文件进行加密.

1
vim -x <filename>

宏录制


  • qa可以把操作记录在寄存器a中.
  • @a可以将被录制的宏replay.
  • @@是一个快捷键, 可以用来replay最新录制的宏.
  • q可以停止录制.
  • <n>@@可以replay n次录制的宏.

外部命令


  • :!ls显示当前目录的内容.
  • :!rm <filename>用于删除文件.
  • :w <filename>可以将当前Vim中正在编辑的文件另存为.

帮助

  • 普通模式, F1可以打开Vim预设的帮助文档.
  • 命令行模式, :h shiftwidth可以打开名为shiftwidth的帮助文件.
  • 命令行模式, 输入:ver显示版本及参数.

功能设定


在命令行模式下进行的功能设定(如:set nu), 在退出Vim后不会保存. 要永久保存配置则需要修改Vim配置文件, 其配置文件为__~/.vimrc__, 也可以放在**/etc/vim/vimrc**.

  • 在命令行模式下, 输入set/se显示修改过的配置.
  • 命令行模式下输入:set all 显示所有的设定值.
  • 命令行模式下输入:set option? 显示option的设定值.(存疑)
  • 命令行模式下输入:set nooption 取消当前设定值.
  • 命令行模式下输入:set autoindent/ai设置自动缩进.
  • 命令行模式下输入:set autowrite/aw设置自动存档,默认未打开.
  • 命令行模式下输入:set background=darklight,设置背景风格.
  • 命令行模式下输入:set backup/bk设置自动备份,默认未打开.
  • 命令行模式下输入: set cindent/cin设置C语言风格缩进.

Notice: 帮助文档可以阅读:help usr_02.txt

Reference

Vim编辑器

简明VIM练级攻略

0%