Professordeng's Blog

vim 是 Linux 自带的文本编辑器,且具有程序编辑的能力,这里记录一些常用的快捷键。

vim

1. 单文件操作

1.1 一般模式

编辑文件首先进入一般模式,例如想编辑文件名为 file 的文件,则使用 vim file 进入一般模式,一般模式具有复制、黏贴、跳转、删除等功能,具体命令如下

usage command
删除一行 dd(delete)
向下删除 n 行 ndd
复制 v 选中复制区域,然后按 y(copy) 复制
剪切 v 选中剪切区域,然后按 d 剪切
粘贴 p(paste)
撤回 u(undo)
恢复撤回 Ctrl + r
行内移动 0 移动到行头,$ 移动到行尾
跳转到第一行 gg
跳转到最后一行 G
跳转到第 n 行 nG
光标移动到屏幕左上方 H
光标移动到屏幕正上方 M
光标移动到屏幕左下方 L
下一页 Ctrl + f
上一页 Ctrl + u
重复上一个动作 Ctrl + r

1.2 命令模式

命令模式的功能包括文本编辑器设置、退出、文本搜索等。通过 :/ 进入命令模式,命令显示在屏幕左下角。

usage command
显示行号 :set nu
隐藏行号 :set nonumber
跳转到指定行 :n
保存当前变更 :w:w!
退出 :q:q!
保存并退出 :wqwq!
向下搜关键字 /keyword ,n 跳到下一个,N 跳到上一个
向上搜关键字 ?keyword,n 跳到下一个,N 跳到上一个
进入复制模式 :set paste(非复制模式下粘贴可能会自动补全一些不相关信息)
整体缩进 v 选中需要缩进的内容,< 向左缩进,> 向右缩进。

1.3 编辑模式

从一般模式进入编辑模式有如下几种方式:

usage command
从目前光标所在处输入 i
在目前所在行的第一个非空格符处开始输入 I
从目前光标所在的下一个字符处开始输入 a
从光标所在行的最后一个字符处开始输入 A
取代光标所在的字符 r
一直取代光标所在的文字,直到按 Esc 为止 R

2. 文本编辑器配置

在编辑文本的过程中,有很多动作是必要的,如果没有文本编辑器配置,需要自己手动敲一遍,大大降低效率,因此我们需要配置默认执行一些执行动作。

vim 的默认配置文件是 $HOME 目录下的 .vimrc,直接使用 vim $HOME/.vimrc 进入即可,详细信息可以在一般模式下使用 :version 指令查看。下面列举一些常用的配置。

2.1 将 Tab 替换成空格

Tab 键在不同的编辑器、不同的浏览器中显示方式是不同的,例如在 github 上一个 Tab 键表示 8 个空格键,而在很多程序编辑器中一个 Tab 键表示 4 个空格键,因此我建议将所有的 Tab 键替换成 4 个空格键,这样不论在什么环境下,代码都不会乱。配置如下

set shiftwidth=2   # 自动缩进 2 个字符
set tabstop=2      # 设定 Tab 宽度为 2 个字符
set expandtab      # 输入 Tab 时自动将其转化为空格
%retab!            # % 前缀应用于整个文件, ! 处理非空白字符后的 Tab

如果是外来文件,想统一所有的 tab 为两个空格的话,用 vim 打开对应文件,执行下面两条命令即可:

:set expandtab
:%ret! 2

2.2 统一编码

如果文件的编码不一致,会导致乱码,所以很有必要将编码格式统一。配置如下

set encoding=utf-8          " vim 内部使用的字符编码方式,包括缓存
set termencoding=utf-8      " 工作终端的字符编码方式
set fileencodings=utf-8,gbk " 探测即将打开的文件的字符编码方式
  1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
  2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的字符编码方式。
  3. 对比 fileencodingencoding 的值,若不同则调用 iconv 将文件内容转换为 encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。
  4. 编辑完成后保存文件时,再次对比 fileencodingencoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。

2.3 语法高亮

如果你想在 vim 上进行程序设计,那么对程序语言进行高亮就很有必要,配置如下

syntax on  " 语法高亮
set nu     " 显示行号

2.4 兼容问题

如果你发现 backspace 键不起删除作用,那么很可能 vimvi 冲突了,如果出现这个问题,添加如下语句

set nocompatible                " 不和 vi 兼容
set backspace=indent,eol,start  " backspace 充当删除键

3. 多文件编辑

首先安装 vim 的插件管理器 vundle,然后利用 vundle 下载并使用 NerdTree 插件 进行多文件编辑。

4. 常见问题

  1. .viminfo.vimrc 有什么区别?

    .viminfo 是历史记录配置文件,例如搜索过的字符串、上次离开的位置等。

    .vimrcvim 的环境配置文件,根据用户的编辑习惯而配置。

5. 参考文档