Skip to content
遇见王斌 edited this page Jul 29, 2023 · 29 revisions

Vim

Stargazers over time

1 建议

  • 建议升级到 Vim 7.4(Vim7.2 时添加 markdown 目录和 pangu 插件会有影响)
  • 君子性非异也 善假于物也

2 部署

  • 本 Vim 可以重复安装
  • 普通用户执行程序时需要有 sudo 权限

2.1 wget 下载(建议)

wget -O V1.1.1.tar.gz https://github.com/meetbill/Vim/archive/V1.1.1.tar.gz

2.2 Git 进行下载安装

#git clone https://github.com/meetbill/Vim.git
#chmod 777 -R Vim
#cd Vim
#./start_vim.sh

常见问题

使用 Git clone 失败

[root@localhost ~]# git clone https://github.com/meetbill/Vim.git
Initialized empty Git repository in /root/Vim/.git/
error:  while accessing https://github.com/meetbill/Vim.git/info/refs

fatal: HTTP request failed

解决方法

#git config --global http.sslVerify false

如果还是提示如上错误

尝试更新 nss

yum update nss nss-util nspr

2.3 Curl 进行下载安装

#curl -o vim.zip https://codeload.github.com/meetbill/Vim/zip/master
#unzip vim.zip
#cd Vim-master
#bash start_vim.sh

2.3 卸载

#cd ~
#rm -rf .vim*

3 Vim IDE 功能

3.1 Vim 原生功能

Vim 原生功能

3.2 快捷键功能

    <F2> : TlistToggle               // 显示函数列表
            按<F2>将会在 VIM 的左边打开一个 Taglist 窗口,这个窗口里面包含了 C 文件里面的定义,如 struct,typedef, 全局变量,函数等。
            使用'<'Ctrl>+h 将光标移动到左边的窗口,上下选择 tag 按回车定位到 tag 的定义处。

    <F3> : NERDTreeToggle            // 当前目录列表,方便打开文件
            按<F3>会在 VIM 的右边打开一个文件浏览器窗口。再按一下<F3>会关闭这个窗口。

    <F4> : MRU			             // 最近文件列表
            按<F4>会打开一个 MRU 窗口,这个窗口里面记录了最近打开的文档,上下选择文件回车打开。如果没有你想打开的文件可以按"q"关闭窗口。

    <F5> : LookupFile
            <F5>在 VIM 的上面打开文件查找窗口,

    <F6> : Dox
            添加函数注释

    <F7> : gcc
            直接按<F7>可以对打开的文件直接编译

    <F8> : gdb
            直接按<F8>可以直接进入 gdb 调试状态

    <F9> : Generate tags
            在代码间跳来跳去。先按<F9>生成 tag 数据库。将会在项目的当前目录下生成 tags 文件。
            此时将光标放在某个函数调用上,按<Ctrl>+] 就会跳到函数的定义处,按<Ctrl>+o 就会跳回来。

    <F10> : HLUDSync  『目前此功能已下线』
            按<F10>可以生成 cscope 的数据库文件 cscope.out,再使用",sa"(:cs add cscope.out) 添加数据库文件。
            当下次启动 VIM 的时候就会自动加载当前目录下的 cscope 数据库文件。
            在.vimrc 里面定义了使用 cscope 的快捷键,比如将光标放在某个函数上使用命令",sc"就可以查看这个函数被哪些函数调用过,

    <F11> :genfiletags.sh

    <F12>add cscope.out 『目前此功能已下线』
            在查找文件之前要生成文件数据库,
            按<F12>将会在项目的当前目录下生成 tags.filename 文件,所以最好是在项目的根目录下按<F12>。再按<F5>就可以使用通配符查找文件了。

3.3 编辑模式下功能

  • c 语言中输入 main 后按 table 键,自动生成 main 函数
  • 输入单词自动补全(注,本文档之前输入的单词自动补全)
  • 按 tab 键会产生 4 个空格,很适合 python 编程哦

3.4 命令行模式下功能

  • 命令行模式输入(画图是 Vim 普通模式下画图,画图时可以随时切换 Vim 编辑模式)
    • :DIstart 可以进行画图(开启 DrawIt 模式)
    • :DIstop 进行关闭
+--------+---------+----------+
| [Home] |    上   | [PageUp] |
+--------+---------+----------+
|   左   |         |    右    |
+--------+---------+----------+
| [End]  |    下   |[PageDown]|
+--------+---------+----------+

向下的箭头(v), 向上的箭头(^)

备注:
(1) DrawIt 模式下如果想上下左右移动而不是想画图的话,需要使用 h(左)j(下)k(上)l(右)
(2) 空格用于切换光标为画图模式还是橡皮檫模式
  • 命令行模式输入

    • :GenTocGFM 生成 GFM 链接风格的 Table of Contents. 适用于 GitHub 仓库里的 Markdown 文件。
    • :GenTocRedcarpet 生成 Redcarpet 链接风格的 Table of Contents. 适用于使用 Redcarpet 作为 Markdown 引擎的 Jekyll 项目或其它地方。
    • :Pangu 手动执行该命令,将当前文件进行中文规范化。
  • 命令行下输入命令时按 tab 键会将所有匹配值输出

3.5 一般模式下功能

  • 普通模式下(折叠):
    • zo 展开
    • zc 收起
    • zn 全部展开
    • zN 全部折叠
  • 普通模式下(进入命令行模式):
    • 空格 点击空格会自动在命令行添加":"

4 Vim 常用操作

4.1 匹配特定的行进行操作

vim 匹配特定的行并删除它 :g/pattern/d

4.2 检查文件类型

:set filetype?

查看文件格式,:set fileformat=unix

4.3 Vim 查看文件编码

执行程序发现输出的中文乱码,可以看下文件的编码方式

:set fileencoding

在 Vim 中直接进行转换文件编码,比如将一个文件转换成 utf-8 格式

:set fileencoding=utf-8

4.4 粘贴代码时

因为 Vim 开启了自动缩进,粘贴代码时会错位,粘贴代码时可以如下操作

# 要粘贴代码时
:set paste
# 粘贴完后
:set nopaste

4.5 空格和 TAB 转换

在.vimrc 中添加以下代码后,重启 vim 即可实现按 TAB 产生 4 个空格 (Vim IDE 中已添加)

set ts=4  (注:ts 是 tabstop 的缩写,设 TAB 宽 4 个空格)
set expandtab

有一个场景是从网上下载个 python 程序,里面是 TAB 键进行缩进的,上面的配置只对新建的文件有用,那么如何进行修改尼

对于已保存的文件,可以使用下面的方法进行空格和 TAB 的替换:

TAB 替换为空格:
:set ts=4
:set expandtab
:%retab!

空格替换为 TAB:
:set ts=4
:set noexpandtab
:%retab!

注:加!是用于处理非空白字符之后的 TAB,即所有的 TAB,若不加!,则只处理行首的 TAB。

4.6 多行注释

命令行模式下,注释掉 line1 与 line2 之间的行

line1,line2s/^/#/g

4.7 删除文件中的空行

如果需要删除文章中的空行,可以使用一下语句:

:g/^\s*$/d

简单解释一下:

g :全区命令
/ :分隔符
^\s*$ :匹配空行,其中 ^ 表示行首,\s 表示空字符,包括空格和制表符,*重复 0 到 n 个前面的字符,$ 表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行

4.8 Vim 中显示不可见字符

将不可见的字符显示

:set invlist

回到正常的模式

:set nolist

同时在 Linux 中,cat -A file 可以把文件中的所有可见的和不可见的字符都显示出来

5 MAC 相关

5.1 Mac 升级 Vim

默认升级的 Vim 是 python3 支持,如果需要添加 python2 support

brew install vim --with-python@2

具体参数可以通过 brew info vim查看

5.2 MAC 上 Ctags 使用

Mac 上使用 ctags 时遇到报错:

ctags: illegal option -- R

问题在于 Mac 预装的 Ctags 是 mac 自己的版本,而我们通常所说的 ctags 是指 Exuberant Ctags。上面这个 -R 的命令就是后者才能用的。

解决方案是重新安装 Exuberant 版的 ctags:

(1) 重新安装 ctags

brew install ctags
alias ctags="`brew --prefix`/bin/ctags"
# 测试
ctags -R

成功后将 alias ctags 信息写入到 shell 的配置文件中即可

(2) 修改配置文件

修改 ~/.vimrc

let Tlist_Ctags_Cmd = 'ctags'

将 Tlist_ctags_cmd 项修改为 'ctags'

5.3 Mac 上 iTerm2 主题

建议设置为 Tango Dark

写 python 的时候,Vim 会进行代码检查,使用这个主题,代码检查标记的红色时,也可以看清楚代码 

6 常见问题

6.1 提示没有 git

错误提示

vim-gitgutter: cannot find git. Please set g:gitgutter_git_executable.
Press ENTER or type command to continue

解决方法

下列方法二选一

  • 在服务器上安装 git
  • 删除 ~/.vim/bundle/vim-gitgutter 目录

6.2 中文乱码

修改 ~/.vimrc 文件,增加如下内容

set encoding=utf-8

附录