Tools系列08丨Vim环境配置与命令使用

一.环境配置

1.Centos

通过下面的命令来查看已经安装的 Vim 版本

yum list installed | grep vim

如果输出只有下面这样的内容的话,就说明安装的 Vim 版本只有基本功能:

vim-minimal.x86_64 2:8.0.1763-13.el8 @System

安装图形界面的 Vim

sudo yum install vim-X11 

如果不在这台机器上进行图形界面登录的话,安装增强版本的 Vim

sudo yum install vim-enhanced

2.Debian和Ubuntu系

如果使用标准的 GNOME 桌面环境的话,安装 vim-gtk3vimgnome

如果使用 KDE 桌面的话,安装 vim-gtk

如果只使用文本界面的话,安装 vim-nox

查看已经安装的vim版本

apt list --installed | grep vim

在 Ubuntu 上,vim 和 gvim 都是指向同一个应用程序的符号链接,且 gvim 的执行效果和 vim -g 相同.

3.Mac安装vim

装了 Homebrew 之后,一般情况下,你需要修改你的 .bash_profile(如果使用 Bash 的话)、.zprofile(如果使用 Zsh 的话)或是相应的 shell 的配置文件,调整 PATH,把 /usr/local/bin 放到 /usr/bin 前面。在 .bash_profile 里这样配置的:

if [[ $PATH != "$HOME/bin"* ]]; then
PATH=~/bin:/usr/local/bin:/usr/local/sbin:`echo $PATH|sed -e "s!:$HOME/bin!!
fi

brew安装

brew install macvim

4.Windows安装

官网下载后,安装配置选项,勾选“安装批处理文件”Create .bat files,去掉“创建默认配置文件”Create Default Config,点击安装。

20210907100902

完成安装后,Vim 会缺省打开一个 README 文件。在这个窗口中,我们应当键入“:e ~_vimrc”

20210907101324

按回车键,然后把下面的内容粘贴进去

set enc=utf-8
set nocompatible
source $VIMRUNTIME/vimrc_example.vim

20210907101452

键入“ZZ”(大写)存盘退出

5.Unix 和 Windows下的 Vim 配置的区别:

  • 点打头的 Vim 文件都成了“_”打头,如 .viminfo 也成了 _viminfo

  • 点打头的 Vim 配置目录 .vim 在 Windows 下则成了 vimfiles

  • 由于 Vim 的生态主要在 Unix 上,某些 Vim 的插件在 Windows 上安装配置需要花费更大的力气。但就一般的文本和程序编辑而言,Vim 在Windows 下和 Linux 下没有本质的不同。甚至 Windows 下还有一个小小的优势:Unix下虽然 Vim 可以编译成支持 Python 2 和 Python 3,但在 Vim 里一旦执行了 Python 2的代码,就不能再执行 Python 3 的代码了;反之亦然。Windows 下则没有这个限制。

5.远程使用vim

要特别注意的,是远程终端软件的远程字符 集(如 PuTTY 中的“Windows > Translation > Remote character set”)应当设置成UTF-8

6.帮助文件

如果是windows环境,需要改.vimvimfiles

cd ~/.vim
mkdir -p pack/my/start
git clone https://github.com/yianwillis/vimcdoc.git pack/my/start/vimcdoc

20210907104327

二.基本概念和基础命令

1.vim命令速查表

20210907132243

2.vim的四种模式

  • 正常(normal)模式(也称为普通模式),缺省的编辑模式;

如果不加特殊说明,一般提到的命令都直接在正常模式下输入;在任何其他模式中,都可以通过键盘上的 Esc 键回到正常模式

  • 插入(insert)模式,输入文本时使用;

比如在正常模式下键入 i(insert)或a(append)即可进入插入模式

  • 可视(visual)模式,用于选定文本块;

可以用键 v(小写)来按字符选定,Vim 里也提供其他不同的选定方法,包括按行和按列块

  • 命令行(command-line)模式,用于执行较长、较复杂的命令;

在正常模式下键入冒号:即可进入该模式;使用斜杠/和问号?开始搜索也算作命令行模式。命令行模式下的命令要输入回车键Enter才算完成

Vim 里的大部分操作会在正常模式下完成。如果你做编辑工作时有超过几秒的停顿,就应当考虑按下 Esc 键,回到正常模式。记住,正常模式就是正常情况下你应当处于的模式

查看当前编辑文件的文件类型

:set ft?

3.基本编辑任务

最基本的配置文件

set enc=utf-8 
set nocompatible
source $VIMRUNTIME/vimrc_example.vim

一些配置说明

# 设置编辑文件的内码
set enc=utf-8
# 保留撤销编辑的能力
set nobackup
# 把撤销文件放在用户特定目录下
set undodir=~/.vim/undodir

github的示例配置:https://github.com/adah1972/geek_time_vim

4.文本修改

d 加动作来进行删除(dd 删除整行);D 则相当于 d$,删除到行尾。

c 加动作来进行修改(cc 修改整行);

C 则相当于 c$,删除到行尾然后进入插入模式。

s 相当于 cl,删除一个字符然后进入插入模式;

S 相当于 cc,替换整行的内容。

i 在当前字符前面进入插入模式;

I 则相当于 ^i,把光标移到行首非空白字符上然后进入插入模式。

a 在当前字符后面进入插入模式;

A 相当于 $a,把光标移到行尾然后进入插入模式。

o 在当前行下方插入一个新行,然后在这行进入插入模式;

O 在当前行上方插入一个新行,然后在这行进入插入模式。

r 替换光标下的字符;

R 则进入替换模式,每次按键(直到 )替换一个字符。

u 撤销最近的一个修改动作;

U 撤销当前行上的所有修改。

5.文本对象选择

20210909141130

dw(理解为delete word),删除光标后面的部分(包括空格),结果是:

20210909141207

diw(理解为delete inside word),删除当前单词,结果是:

20210909141446

daw(理解为 delete a word),删除当前单词以及前面的空格

20210909141930

diW

20210909142155

daW

20210909142338

6.更快的移动

我们可以使用 PageUpPageDown 来翻页,但 Vim 更传统的用法是 C-BC-FC指的是Ctrl,B、F分别代表 Backward 和 Forward。

除了翻页,Vim 里还能翻半页,有时也许这种方式更方便,需要的键是 C-UC-DUpDown

只关心当前屏幕的话,可以快速移动光标到屏幕的顶部、中间和底部:用 H(High)、 M(Middle)和 L(Low)就可以做到。

7.Vim 安装目录写的运行支持文件

Vim 的工作环境是由运行支持文件来设定的,在不同的平台上有着相似的目录结构。

在大部分的Unix系统的位置是/usr/share/vim/vim82

macOS Homebrew 下:/usr/local/opt/macvim/MacVim.app/Contents/Resources/vim/runtime

Windows 下:C:\Program Files (x86)\Vim\vim82

最常用的子目录应该是下面 这几个:

  • syntax:Vim 的语法加亮文件

    • syntax 目录显示了,Vim 对各种不同的文件类型提供了语法加亮支持,比如python.vim对python文件的支持。
  • doc:Vim 的帮助文件

  • colors:Vim 的配色方案

  • plugin:Vim 的“插件”,即用来增强 Vim 功能的工具

    • plugin中有很多系统内置的插件,具体功能见下图。 除了 rrhelperspellfile 属于功能支持插件,没有自己的帮助页面,其他功能都可以使 用:help命令来查看帮助。比如查看zip的功能,使用:help zip查看

Snipaste_2021-09-09_18-05-41

注意:

Vim 的安装目录是不应该去修改的,首先,你可能没有权限去修改这个目录;其次,即使你有修改权限,这个目录会在 Vim 升级时被覆盖,你做的修改也会丢失。用户自己的配置应当放在自己的目录下(Unix 下的 .vim,Windows 下的 vimfiles),这个目录应和 Vim 安装目录下的运行支持文件目录有 相同的结构。如果一个同名文件出现用户自己的 Vim 配置目录里和 Vim 的安装目录里,用户的文件优先。

换句话说,修改 Vim 行为最简单的一种方式,就是把一个系统的运行支持文件复制到自己 的 Vim 配置目录下的相同位置,然后修改其内容。

8.Vim 软件包

1.为什么使用包管理器

Vim 的目录结构有点传统 Unix 式:一个功能用到的文件可能会分散在多个目录下。就像 传统 Unix 上 Vim 的文件可能分散在 /usr/bin、/usr/share/man、/usr/share/vim 等目录下一样,一个 Vim 的插件(严格来讲,应该叫包)通常也会分散在多个目录下:

  • 插件的主体通常在 plugin 目录下

  • 插件的帮助文件在 doc 目录下

  • 有些插件只对某些文件类型有效,会有文件放在 ftplugin 目录下

  • 有些插件有自己的文件类型检测规则,会有文件放在 ftdetect 目录下

  • 有些插件有特殊的语法加亮,会有文件放在 syntax 目录下

但是按文件类型老组织目录呢,而不是按相关性,没办法用git管理。后来vim出现一些包管理器,基本模式是相通的:每个包有自己的目录,然后这些目录会被加入Vim的运行时路径(runtimepath)选项里。从 Vim 8 开始,Vim 官方也采用了类似的体系。Vim 会在用户的配置目录(Unix 下是 $HOME/.vim ,Windows 下 是 $HOME/vimfiles )下识别名字叫 pack 的目录,并在这个目录的子目录的 startopt 目录下寻找包的目录。

20210909183239

有了这样的目录结构,用户要自己安装、管理包就方便多了。不过,我们还是推荐使用一个包管理器。包管理器可以带来下面的好处:

  • 根据文本的配置(一般写在 vimrc 配置文件里)决定要安装哪些包

  • 自动化安装、升级和卸载,包括帮助文件的索引生成