Rekord
文章34
标签24
分类4
学习Vim

学习Vim

约2.3k字 预计需要8分钟

学习Vim

光标的移动

移动光标

单位级

  • h 向左一字符
  • j 下一行
  • k 上一行
  • l 向右一字符

单词级

  • w or W 向右移动到下一单词开头
  • e or E 向右移动到单词结尾
  • b or B 向左移动到单词开头

注意:所有小写单词都是以分词符作为单词界限,大写字母以空格作为界限

块级

  • gg 到文档第一行
  • G 到文档最后一行
  • 0 到行首(第 1 列)
  • ^ 到该行第一个非空白字符
  • $ 到行尾
  • Ctrl-d 向下移动半页
  • Ctrl-u 向上移动半页
  • :<N> or <N>gg 跳转到第 N 行
  • :+<N> or <N>j 向下跳 N 行
  • :-<N> or <N>k 向上跳 N 行

注意:所有命令前都可以加一个数字 N,表示对后面的命令执行 N 次,例如你想向下移动 3 行,除了可以用 :+3 之外,还可以用 3j 来实现同样的效果。另外,上面实际上有两种命令:一种是键入后立即执行的,比如 gg;还有一种是先输入 : 的,这类命令需要在输入完成后按回车执行。

打开文件、查找内容

打开文件

在 Vim 中打开文件

  • :e <filename> 打开名为 filename 的文件,若文件不存在则创建之
  • :Ex 在 Vim 中打开目录树,光标选中后回车打开对应文件(提示:- 进入上级目录)
  • 将光标定位到文件名的任意位置上,直接敲键盘 gf

查找

文档内查找

  • * 向后查找光标当前所在单词
  • # 向前查找光标当前所在单词
  • /<search> 向后查找指定字符串
  • ?<search> 向前查找指定字符串
  • n 继续查找下一个
  • N 继续查找上一个

注意: nN 是有方向性的,若你之前通过 * 查找,则 n 会继续向文档尾方向查找,N向文档首方向;反之,若你通过 # 查找,则 n 指向文档首,N 指向文档尾

匹配查找

Vim 中可以使用 %()[]{} 进行匹配查找,当光标位于其中一个
符号上时,按下 %,光标会跳到与之匹配的另外一个符号上。

buffer

简单理解buffer 就是当前 Vim session 的文件历史记录。

现在你的 buffer 中应该已经有两个文件了,你可以用 :buffers:ls 命令查看,看到buffer 列表了吧,大概是这个样子的:

:ls
  1 #h   "file-one.md"                  line 47
  2 %a   "file-two.md"                  line 1
Press ENTER or type command to continue

接下来你可以尝试通过以下命令在文件缓存中进行跳转了

  • :bn 打开缓存中下一个文件
  • :bp 打开缓存中上一个文件
  • :b<N> 打开缓存中第 N 个文件

你也可以使用 :bdelete<N> 来删除所要关闭的缓冲区,缩写 :bd<N>

文档的修改与保存

修改文档

控制光标、打开文件、切换文件、并在文件中查找内容,这些操作都是在 Vim 的 normal模式下进行的。现在,是时候进入 Vim 的另外一种模式 —— insert 模式,学习一下如何修改文件了。

插入

  • i 当前字符前插入
  • a 当前字符后插入

注意:以上两个命令都会使 Vim 进入 insert 模式,进入该模式后光标会发生变化,这时输入的文字会直接出现在文档中,按 Esc 键或 Ctrl-[Ctrl-C 退出 insert 模式。

删除(并保存到 Vim 剪贴板)

  • x 删除当前字符,相当于 insert 模式下的 Delete
  • X 删除前一个字符,相当于 insert 模式下的 Backspace
  • dd 删除当前行,并将删除的内容保存到 Vim 剪贴板
  • d<X> 删除指定内容并保存到 Vim 剪贴板

说明: <X> 部分是对操作内容的描述,如果要删除一个单词,就输入 dw 或者 de,要复制当前位置到行尾的内容,就输入 y$,要删除后面 3 个字符并插入,就输入 c3l 诸如此类。

复制

  • yy 复制当前行到 Vim 剪贴板
  • y<X> 复制指定内容到 Vim 剪贴板

粘贴

  • p 在当前位置后粘贴
  • P 在当前位置前粘贴

合并

  • J 将当前行与下一行合并

替换

  • r<X> 将当前字符替换为 X
  • gu<X> 将指定的文本转换为小写
  • gU<X> 将指定的文本转换为大写
  • :%s/<search>/<replace>/ 查找 search 内容并替换为 replace 内容

撤销、重做

  • u 撤销
  • Ctrl-r 重做

保存文件

  • :w 保存当前文件
  • :wa 保存全部文件
  • :wq or ZZ 保存并退出
  • :q! or ZQ 强制退出,不保存
  • :saveas <new filename> 文件另存为
  • :w <new filename> 文件另存一份名为 <new filename> 的副本并继续编辑原文件

一些小技巧

简单设置 Vim

“工欲善其事,必先利其器”。尽管 Vim 非常强大,但默认配置的 Vim 看起来还是比较朴素的,为了适合我们的开发需求,要对 Vim 进行一些简单的配置。

  • :set number 显示行号
  • :set relativenumber 显示相对行号(这个非常重要,慢慢体会)
  • :set hlsearch 搜索结果高亮
  • :set autoindent 自动缩进
  • :set smartindent 智能缩进
  • :set tabstop=4 设置 tab 制表符所占宽度为 4
  • :set softtabstop=4 设置按 tab 时缩进的宽度为 4
  • :set shiftwidth=4 设置自动缩进宽度为 4
  • :set expandtab 缩进时将 tab 制表符转换为空格
  • :filetype on 开启文件类型检测
  • :syntax on 开启语法高亮

这里列出的是命令,你可以通过在 Vim 中输入进行设置,但这种方式设置的参数只在本次关闭 Vim 前生效,如果你退出 Vim 再打开,之前的设置就失效了。

若要永久生效,需要修改 Vim 的一个自动配置文件,一般文件路径是 /home/<user>/.vimrc(Linux系统)或 /Users/<user>/.vimrc(Mac OS 系统)

如果没有就新建一个,以 Mac OS 系统为例:

cd ~
vim .vimrc

现在你已经在 Vim 中打开了你的 Vim 专属配置文件,将上面提到的配置复制到你的文件中,记得要删除每行开头的 :

修改完成执行 :wq 或者 ZZ 保存退出,再次进入 Vim 时,你的这些配置就已经生效了

重复上一次命令

Vim 有一个特殊的命令 .,你可以用它重复执行上一个命令。

缩进

  • >> 向右缩进当前行
  • << 向左缩进当前行

自动排版

  • == 自动排版当前行
  • gg=G 当前文档全文自动排版
  • <N>== 对从当前行开始的 N 行进行自动排版
  • =<N>j 对当前行以及向下 N 行进行自动排版
  • =<N>k 对当前行以及向上 N 行进行自动排版

分屏与标签页

窗口分屏

工作中经常会遇到这种情况,就是需要参照其他文档编辑当前文档(场景:翻译),或者从另外一个文档copy 代码到当前文档(场景:复制 html 元素类名到 css 文档),这时候就是你最需要分屏的时候。

分屏方式

  • :split 缩写 :sp or Ctrl-w s 上下分屏
  • :vsplit 缩写 :vs or Ctrl-w v 左右分屏
  • :diffsplit 缩写 :diffs diff 模式打开一个分屏,后面可以加上 {filename}

窗口跳转

  • Ctrl-w w 激活下一个窗口
  • Ctrl-w j 激活下方窗口
  • Ctrl-w k 激活上方窗口
  • Ctrl-w h 激活左侧窗口
  • Ctrl-w l 激活右侧窗口

移动分屏

  • Ctrl-w L 移动到最右侧
  • Ctrl-w H 移动到最左侧
  • Ctrl-w K 移动到顶部
  • Ctrl-w J 移动到底部

注意:区分大小写。另外,可以将底部的屏幕移动到右侧,实现上下分屏到左右分屏的转换。

屏幕缩放

  • Ctrl-w = 平均窗口尺寸
  • Ctrl-w + 增加高度
  • Ctrl-w - 缩减高度
  • Ctrl-w _ 最大高度
  • Ctrl-w > 增加宽度
  • Ctrl-w < 缩减宽度
  • Ctrl-w | 最大宽度

标签页

创建标签页

  • :tabnew or :tabedit 缩写 :tabe 打开新标签页
  • Ctrl-w gf 在新标签页中打开当前光标所在位置的文件名

注意::tabnew:tabedit 后面都可以跟一个 <空格><文件名> 用以在新标签页中打开指定文件,还可以在 : 后面加一个数字,指出新标签页在列表中的位置(从 0 开始)。

切换标签页

  • gt or :tabnext 缩写 :tabn 下一个标签页(最后一个会循环到第一个)
  • gT or :tabprevious 缩写 :tabp 上一个标签页(第一个会循环到最后一个)
  • :tabrewind 缩写 :tabr or :tabfirst 缩写 :tabfir 到第一个
  • :tablast 缩写 :tabl 到最后一个标签页

关闭标签页

  • :tabclose 缩写 :tabc 关闭当前标签页
  • :-tabc 关闭上一个标签页
  • :+tabc 关闭下一个标签页
  • :tabonly 缩写 :tabo 关闭其他标签页

本文章修改自dofy/learn-vim

本文作者:Rekord
本文链接:https://sxrekord.com/learn-vim/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×