【04】vim编辑器入门

20 阅读4分钟

[26/3/12]vim编辑器入门

参考资料:《鸟哥的 Linux 私房菜 基础篇》第 9 章

为什么学习 vim

首先,在任意的 Linux 环境下都会配备有 vi 编辑器。

而 vim 则是 vi 编辑器的进阶版。

然后,很多程序都会调用 vim 的接口,所以说不得不了解学习这个 vim。

三种模式

  1. 一般命令模式:这个模式下就是不能打字!但是可以复制粘贴之类的。
  2. 编辑模式:这个模式下才可以打字!
  3. 命令行模式:不对文本进行操作的模式。

一般命令模式

需要记住以下几个快捷键即可:

  1. : :启动命令模式
  2. /:搜索,比如想要搜索 OpenCV,就输入 /OpenCV 然后可以按 n 来向下找搜索结果(其实是启动了命令模式)
  3. 左下上右移动:左h;下j;上k;右l
  4. u :Undo,也就是撤销,就是 win 下的 ^Z ;
  5. dd :剪切所在的这一行
  6. yy :复制所在的这一行
  7. p :Paste,粘贴
  8. G :移动到尾行
  9. nG :移动到第 n 行(n 是数字)
  10. gg :移动到第一行
  11. 数字的含义就是重复多次操作,比如说 5yy 表示连续复制 5 行内容

插入家族(进入编辑模式)

  1. i (insert):在光标插入(你目前用的)。
  2. a (append):在光标插入。
  3. I (大写 I):光标瞬间跳到这一行的行首,并开始插入。(写 Shell 脚本时,一键跳到行首加 # 注释,极其爽)。
  4. A (大写 A):光标瞬间跳到这一行的行尾,并开始插入。(写 C++ 时,发现句尾漏了分号,无论光标在哪,直接按 A 敲下 ;,行云流水)。
  5. o (小写 o):在当前行的下方,直接新开一个空行,并进入插入模式。(最常用的加代码方式)。
  6. O (大写 O):在当前行的上方,新开一个空行。

行内跳跃家族

  1. 0 (数字零):瞬间跳到行首。
  2. $ (美元符号):瞬间跳到行尾。
  3. w (word):向右跳一个单词。(比如从 std::cout 直接跳到下一个变量名)。
  4. b (back):向左跳一个单词。
  5. e (end):跳到当前单词的最后一个字母。

比如你想删除光标后的 3 个单词,直接在一般模式下敲 3dw

文本对象操作

Vim 实际上有一套自己的语法:动词 + 介词 + 名词

  1. 动词:c (修改 change,等同于删掉并进入插入模式)、d (删除 delete)、y (复制 yank)
  2. 介词:i (在...内部 inside)、a (包含边界 around)
  3. 名词:w (单词 word)、" (引号)、( (括号)

例子:假设你有这样一行 C++ 代码:printf("Hello LeetCode %d\n", num);,你的光标停在 LeetCode 这个词上的任意位置。

  • 在 Vim 里: 你只需要极其优雅地敲下三个键:ci" (Change Inside Quotes)。Vim 会瞬间自动把 " " 里面的所有内容清空,并让你直接开始打字!
  • 你想把 LeetCode 这个单词删掉?直接敲 diw (Delete Inside Word)。

编辑模式

  1. [ESC] :退出,回到一般模式
  2. 进入需要看前文的插入家族

编辑模式就和一般的编辑器没啥区别

命令模式

  1. [ESC] :退出命令模式回到一般模式
  2. :w :write,写入文件
  3. :q :quit,退出
  4. :q! :不保存修改,强制退出(!表示强制)
  5. :wq :保存并退出,最常用
  6. :set nu :显示行号
  7. :set nonu :不显示行号

多行操作

  1. v :多行的字符选择
  2. V :多行的行选择
  3. ^v :矩形方式的多行选择
  4. y :多行内容的复制
  5. d :多行内容的剪切
  6. p :粘贴

多文件操作

主要是为了跨文件的内容复制粘贴。

  1. vim [filename 1] [filename 2] ... :同时打开多个文件
  2. :n :下一个文件
  3. :N :上一个文件
  4. :files :列出打开的所有文件

多窗口

不需要使用 vim 自带的多窗口,分屏还是靠 Tmux 比较好。

跨系统兼容

换行符的问题

由于 win 和 Linux 的换行符定义不相同,所以文本文件保存之后,跨系统传输之后执行的时候会出问题,这个时候可以通过一个工具来将文件内容做一个转换,转换完成之后就可以正常执行了。

  1. dos2unix [-kn] file [newfile]
  2. unix2dos [-kn] file [newfile]

编码格式的问题

可以手动转换编码格式:

  1. icov --list
  2. icov -f 原本编码 -t 新编码 filename [-o newfile]

补充说明:-f 表示 from,-t 表示 to,最后的 [-o newfile] 如果写出来了,就表示原文件保留下来,生成的新文件被另外保存。

推荐配置

配置文件为:~/.vimrc

set number         " 显示行号
set syntax=on      " 语法高亮
set expandtab      " 将输入的 Tab 自动展开为空格
set tabstop=4      " 一个 Tab 键代表 4 个空格的宽度
set shiftwidth=4   " 在使用 >> 或 << 进行缩进时的宽度也是 4

因为真实的生产环境下,一般不会有非常多的个性化配置,所以推荐个性配置越少越好,推荐就以上几个配置就够了