特别说明:要在个人随笔后写评论的小伙伴们请注意了,个人博客开启了 MathJax 数学公式支持,MathJax 使用
$
标记数学公式的开始和结束。若是某条评论中出现了两个$
,MathJax 会将两个$
之间的内容按照数学公式进行排版,从而致使评论区格式混乱。若是你们的评论中用到了$
,可是又不是为了使用数学公式,就请使用\$
转义一下,谢谢。html
想从头阅读该系列吗?下面是传送门:linux
原本我是想写完 Linux 桌面系统的美化和字体配置以后再写 Vim 的。可是等我写完玩转 Linux 系统的方法论一看,发现一个好用的文本编辑器在 Linux 系统中实在是过重要了,在玩转 Linux 系统的方法论中,个人不少例子都是靠 Vim 展现出来的。没有文本编辑器,怎么去读代码、改配置、写脚本呢?若是不能读代码、改配置、写脚本,该系列后面的内容怎么进行得下去呢?因此,我这一篇写一写 Vim 的配置。c++
先介绍一下 Vim。Vim 是 Linux 系统上的最著名的文本/代码编辑器,也是早年的 Vi 编辑器的增强版,被誉为文本/代码编辑器之中最为优秀经典的上古神器。 它之因此会得到如此美誉,我想主要有如下缘由:1.它古老而神秘,学习曲线陡峭,难以驾驭,可是一旦学会则受益不浅。现在被看做是高手、Geek 们专用的编辑器。因此尽管 Vim 已是古董级的软件,但仍是有无数新人迎着困难去学习使用。 2.轻便,无需多言,当仅仅只须要对某一文本文件(脚本代码、配置文件)进行简单的编辑的时候,所使用的工具固然是越轻便越好。Vim 同时也是阅读文本文件的利器。 3.经典巧妙的编辑方式及强大的功能。它全程使用键盘操做,用户必须记住一堆快捷键、按键组合以及各类命令才能开始使用,一旦使用熟练则编辑效率远超其他编辑器,并且具备各类插件、语法高亮、代码补全、配色方案等极其丰富的资源以及灵活的配置。git
我主要在如下状况下使用 Vim: 1.用来修改服务器系统的配置文件。不少时候, Linux 做为服务器是不会开启图形界面的,当须要远程操做时,只能利用 SSH “命令字符式”的 Shell 界面对其进行操做,这种状况下,Vim 天然是首选。 2.用来阅读内核源代码和系统的脚本。理由同上。 3.用来写简单的程序,通常都是单文件的程序,或多文件可是只有少数几个文件的项目,例如学习一门编程语言的时候作练习题,喜欢看到文件夹内干干净净,不喜欢一大堆相似 .project 的文件。 4.装B,花花绿绿的纯文本字符界面,很酷。github
不适合 Vim 使用的场景: 1.大的编程项目,大的项目仍是最好使用 IDE,若是要远程链接没有图形界面的服务器写大项目,最好仍是在服务器上创建代码仓库。理由:Vim 没有好的项目管理功能,Vim 的自动补全只创建在文本匹配上,没有程序语言的语义分析功能。 2.对内容的输入要求不高,可是常常须要设置显示格式,且每一个动做之间自己就有不少的停顿的工做,用其余 GUI 编辑器( LibreOffice Writer、WPS)效率反而比 Vim 高。编程
有人说,Vim 是“成也插件、败也插件”。Vim 灵活的配置和丰富的插件极大地加强了它的功能,可是也极大地增长了咱们管理 Vim 的难度。首先,在使用 Vim 以前,必须通过适当的配置,而 Vim 的配置又极其繁琐。 Vim 的插件丰富,在网上不乏使用各类插件将Vim 配置成强大 IDE 的文章,可是 Vim 的插件管理很是困难,由于每安装一个插件,都须要将该插件的文件分别放到 Vim 安装路径下的 plugin、autoload、syntax、doc 等目录下。好在是目前有很多能管理插件的插件,它们不只解决了 Vim 插件在文件系统中分散的问题,同时可以自动搜索和下载插件。vim
从前面的介绍可知,Vim 神秘高效水又深,因此吸引了一大批信徒。在网络上关于 Vim 的自定义配置汗牛充栋。既有高手 Tim Pope 的极简配置 tpope/vim-sensible(这个配置一个插件都没有),也有 spf13/spf13-vim 和 SpaceVim 这样大而全的配置。而对我来讲,我喜欢简洁而优雅,一大堆 Plugin 堆砌起来的东西我当然不喜欢,可是一个插件都没有的极简配置那用起来也不太顺手。因此我必须得本身配。后端
本身配 Vim,必然涉及到 Plugin 的选型的问题。说到选型,那就有不少话要说了。首先是 Vim 自身版本的进步和功能的进步,目前 Vim 已经进入到 Vim 8 的时代,增长了很多新功能,像异步啊、内置 Terminal 啊之类的。并且还有 NeoVim 和它抢饭碗。其次就是 Vim 插件的做者的理念发生了变化,他们逐渐瞧不上纯粹 VimScript 写的插件,毕竟纯 VimScript 写的插件功能比较有限,速度也不够快。目前的 Vim 插件有几个发展趋势:一是要充分利用异步的支持,二是每每使用某些后端提供更强大的功能支持,三是喜欢搞大而全的框架。下面我来逐一举例说明。浏览器
例如管理插件的插件,我之前一直都是用 Vundle,我以为挺好用的。可是这几年又雨后春笋般的冒出了几种新的管理插件的插件,像 junegunn/vim-plug 和 Shougo/dein.vim,看一下它们的说明,无一例外都是说使用了并发技术,加快了插件的下载速度。bash
再例如 Vim 中的自动补全。其实 Vim 自身就支持补全功能,不过使用起来一点都不自动,须要使用 Ctrl+P 或者 Ctrl+X Ctrl+O 这样的快捷键才会调出补全功能。Vim 自身的补全功能支持 buffers 中的单词,也支持 dictionary 和 tags 中的条目。可是无论怎么说,都只是基于字面意义上的补全,不支持深层次的对编程语言的语义分析。可是能够用后端解决这个问题啊。像 Valloric/YouCompleteMe,在网络上的名声就是典型的难安装难配置,由于它须要使用 Clang 做为后端提供对 C/C++ 语义的支持,使用 Jedi 提供对 Python 的支持,使用 OmniSharp 提供对 C# 的支持,等等……。正是如此,使得咱们如果想使用某些插件,还不得不在系统上安装 Clang、Python、Lua 这样的一些程序,比较复杂。
自动补全中还有大名鼎鼎的 Shougo/neocomplete.vim。可是我到 github 上一看,好家伙,竟然说在 Vim 8 上建议就不要用了,要用就用 Shougo/deoplete.nvim。这也算是 Vim 版本的升级推进插件的升级吧,虽然怎么看怎么像这些插件倾向于 NeoVim 更多一点。而 deoplete 也只是一个自动补全的框架,它仍是须要不少后端对编程语言的语义分析提供支持。看下面这个截图,这些都是 deoplete 所须要的后端:
再来一个例子,关于 Vim 的目录树插件,老牌的 NERDTree 不用说了吧,我用着挺舒服的。但如今流行的趋势是 vimfiler。而后我到 github 上一看,立刻发现两个难题。一是 vimfiler 须要 unite.vim 支持,二是这个插件也不更新了,在 Vim 8 或者 NeoVim 的时代,请使用 Shougo/defx.nvim ,并且在 Defx 的文档中,赤裸裸地写明了,须要 Python 3.6.1+ 的支持。哦对了,必须提一下,Defx 我试用了,根本没配成功。
经过前面的介绍,发现这个 Shougo 还真是有点高产。前面提到的 unite.vim 也是他写的,并且又升级了。在 Vim 8 或 NeoVim 中建议使用 Shougo/denite.nvim。这里的 unite 和 denite 就是我前面说的大而全的框架,框架之下,须要别的更多的插件做为 source 来提供更多的功能,而这个框架,负责把控 Vim 的界面。
还有一个网红插件 Yggdroot/LeaderF,主要是为了取代经典的 ctrlp,并且其功能比 ctrlp 强大很多。这个却是没有要求 Vim 8,不过仍是要求 Python。值得一用。
鉴于以上提到的错综复杂的关系,以及我自身的强迫症,我决定仍是回归经典。Vim 7 就能用多好,纯 VimScript 多好,不想整那后端这后端的。因此我仍是使用 Vundle 管理插件,并选择了 7 个最经常使用的插件,其中一个仍是 colorscheme。惟一的升级,可能算是把 Taglist 升级为 Tagbar 了吧。另外,我仍是选择了 CtrlP,没有选择 LeaderF。我以为功可以用了。至于 tpope/vim-surround 、nerdcommenter 之类的,那就不要了吧,不要它们也多敲不了几下键盘,还能够省下学习成本。若是为了美观,这个 vim-airline/vim-airline 插件却是不错,这个 Lokaltog/vim-powerline 也不错,可是以上两个插件须要特殊字体的支持,到这里 powerline/fonts 能够下载字体,我通常选择 DejaVu Sans Mono for Powerline。若是须要语法检查,vim-syntastic/syntastic 能够试一下。
必须得说明一下:怎么为 Vim 配插件还得看本身的需求。我主要是看文档和看代码,偶尔改改配置文件,有时还要在非 GUI 环境下改配置文件。就算写代码也只用 Vim 写很是简单的。因此我这个经典配置彻底够用了,并且开箱即用,超级方便。至于需求比较复杂的,建议玩玩我前面提到的 SpaceVim 。
个人配置很是简单,加上空行,也不超过 75 行,我只选择了 7 个插件,全部的插件都是纯 VimScript 的,全部插件都是开箱即用,不须要额外配置。依赖方面,除了 ctags,不须要任何后端的支持。ctags 软件用来分析程序源代码,生成 tags 文件,可不只仅只支持 C/C++哟,它还支持一大票编程语言。使用man ctags
能够查看 ctags 的用法,使用ctags --list-languages
能够查看 ctags 支持哪些编程语言。Vim 自身就有不少地方须要用到 tags 文件。首先是 Vim 的跳转功能,快捷键是 Ctrl+],须要 tags 文件支持。其次,Vim 的自动补全功能,不只支持 buffers 中的单词,也支持 dictionary 和 tags 中的条目。而在我选择的几个插件中,Tagbar 插件能够调用 ctags 对当前编辑的文件进行分析,生成符号表。
目录树插件,我仍是选择老牌的 NERDTree。文件搜索插件,我仍是选择 CtrlP。自动补全插件,我选择的是 OmniCppComplete 和 AutoComplPop,免除了我按 Ctrl+P、Ctrl+X Ctrl+O 这样的操做,当我输入单词时,补全就自动跳出来了。使用 syntastic 进行语法检查。没有使用 airline,也没有使用 powerline,一是它们须要专用字体的支持,二是我我的对酷炫屌炸天的界面并非很感兴趣,并且这些酷炫的效果一到 Linux 的纯字符界面就抓瞎,三是若是使用这些插件,配置文件中就必须增长针对这些插件的配置,影响配置文件的简洁。我仍是使用 Vundle 管理以上这些插件。只需三步,便可完成 Vim 的安装和配置。
sudo aptitude install vim vim-gtk3 exuberant-ctags curl git
代码很是简洁,以下:
set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin 'VundleVim/Vundle.vim' Plugin 'majutsushi/tagbar' Plugin 'kien/ctrlp.vim' Plugin 'scrooloose/nerdtree' Plugin 'vim-scripts/AutoComplPop' Plugin 'vim-scripts/OmniCppComplete' Plugin 'vim-syntastic/syntastic' Plugin 'altercation/vim-colors-solarized' call vundle#end() filetype plugin indent on set history=1000 set ruler set number set showcmd set showmode set laststatus=2 set cmdheight=2 set scrolloff=3 set fillchars=stl:\ ,stlnc:\ ,vert:\ set noerrorbells set novisualbell set t_vb= set background=dark syntax on colorscheme desert set cursorline hi CursorLine term=NONE cterm=NONE ctermbg=0 guibg=Gray40 set backspace=2 set whichwrap+=<,>,h,l set expandtab set smarttab set shiftwidth=4 set tabstop=4 set autoindent set cindent set nobackup set noswapfile set autoread set autowrite set autochdir set fileencodings=utf-8,cp936 set fileformats=unix,dos,mac set showmatch set matchtime=2 set hlsearch set incsearch set ignorecase set smartcase set magic set lazyredraw set nowrapscan set iskeyword+=_,$,@,%,#,-,. if has("gui_running") colorscheme solarized set guifont=DejaVu\ Sans\ Mono\ 12 set guioptions=aegicmT endif map <F2> :NERDTreeToggle<CR> map <F3> :TagbarToggle<CR> map <F4> :CtrlPMixed<CR>
Vim 是能够访问全局剪切板的,因此只须要复制上面的代码,而后使用vim ~/.vimrc
命令编辑~/.vimrc
文件,在 Vim 的 Normal 模式下键入"*p
就能够把以上内容粘贴到 Vim 中。而后键入:wq
保存退出便可。以下图:
先创建Vundle须要用到的目录,而后使用 git 从 github 上下载 Vundle,命令以下:
mkdir ~/.vim mkdir ~/.vim/bundle cd ~/.vim/bundle git clone https://github.com/VundleVim/Vundle.vim.git
而后,再打开 Vim,在 Normal 模式下键入:PluginInstall
,静静地等待它安装完成就能够了。以下图:
在使用过程当中,按 F2 键调出 NERDTree,按 F3 键调出 Tagbar,按 F4 键调出 CtrlP。若是只写个简单的程序,单窗口就够了。写个简单的 C 代码看看效果,return 0
后面故意不写分号看一下 syntastic 的语法纠错功能,printf
故意写个开头看看自动补全功能(这里须要按 Ctrl+P 调出补全),以下图:
实战一下,看看用 Vim 阅读 Linux 内核源代码是什么效果。首先,咱们须要安装 linux-source 软件包,而后解压缩,再而后生成 tags 文件。命令以下:
sudo apt install linux-source cd /usr/src/ sudo tar jxvf linux-source-4.15.0.tar.bz2 cd linux-source-4.15.0 sudo ctags -R --c++-kinds=+p --fields=+ias --extra=+q
最后,在/usr/src/linux-source-4.15.0/
目录中运行vim
命令就能够了。按 F4 调出 CtrlP,输入咱们想看的源代码文件名进行查找,例如红黑树的实现 rbtree.c,你只要输入rbtree
,CtrlP就会自动找到lib/rbtree.c
。若是想要在代码间跳转,或者自动补全,就须要在 Vim 中加入 tags 文件,使用:set tags+=/usr/src/linux-source-4.15.0/tags
命令便可。我在使用 Vim 写 C/C++ 程序时,经常喜欢在/usr/include
目录下生成 tags 文件,而后把它添加到 Vim 中,这样,C/C++ 标准库和 Linux 系统库的自动补全就全有了。在控制台下运行的效果,以下图:
我特地退出全屏模式进行展现,由于上一篇一开头就向你们展现过全屏半透明控制台的威力了。在 GVim 中运行的效果,以下图:
Vim 虽好,可是学习曲线仍是有点陡的。有没有人记得第一次使用 Vim 时什么都作不了的那种无力感呢?在 Stack Overflow 上有一个问题——怎么退出 Vim——在五年的时间里得到了一百多万的浏览量。有的人第一次使用 Vim 时,怎么都输入不了文字;有的人第一次使用 Vim 时,怎么都退出不了 Vim。这些人每每都是误入 Vim 的,而我不同,我学 Linux 的时候是按教科书来的,Vim 也是教科书推荐给个人,因此基本操做仍是知道一点点的,不至于彻底用不了。其实让 Vim 开始工做,只须要了解最简单的一点点知识就能够了。
首先,要知道 Vim 分为两种不一样的模式:Normal 模式和 Insert 模式。刚启动时,Vim 处于 Normal 模式,是不能向文档中输入文字的,必须按i
键,进入插入模式,才能向文档中插入文字。这时,Vim 就和普通的文本编辑器没啥区别了,要移动光标,用方向键,要删除文字,用 Backspace 键。等编辑完文档,怎么保存和退出呢?这时,必须退出 Insert 模式,回到 Normal 模式,按 ESC 键能够回到 Normal 模式。而后再输入:wq
保存退出,只输入:w
是保存,只输入:q
是退出,可是修改过的文档不保存是退出不了的,若是想放弃修改直接退出,输入:q!
命令便可。这几个命令比较好记,i
就是 Insert 的首字母,:w
就是 Write 的首字母,:q
就是 Quit 的首字母,而:q!
后面的感叹号,能够理解为强制的意思,强制退出。因此,Vim 的最小工做子集很是简单,找到正确的资料的话一分钟就学会了。以下表:
命令 | 功能 |
---|---|
i | 进入 Insert 模式 |
<Esc> | 退出 Insert 模式,回到 Normal 模式 |
<Left>、<Right>、<Up>、<Down> | 移动光标 |
<Backspace> | 删除光标前的文字 |
:w | 保存文档 |
:q | 退出 Vim |
:q! | 不保存文档,强制退出 Vim |
若是这时尚未被 Vim 吓退,就能够更进一步地学习,能够从 Vim 的官方帮助文档入手。在 Vim 中输入:help
就能够查看 Vim 的文档。Vim 启动时有一个空白窗口,输入:help
后,Vim 被分割为两个窗口,上面一半显示帮助文档,这看着确定不舒服啊,怎么办呢?只须要输入:only
,就能够只保留文档窗口了。Vim 的文档很是详细,在该帮助文档的一开始,就告诉你们可使用 Ctrl+] 进行跳转,使用 Ctrl+T 或者 Ctrl + O 跳回。因此,就算是新手,使用该帮助文档也是没有什么困难的。我建议顺着 usr_toc.txt 一章一章的往下读。
通常用户对 Vim 的兴趣就是在这个阶段培养起来的。由于读着读着就会发现,哎哟,我能够不用鼠标耶,手指不离开键盘,速度快了很多耶;哎哟,我能够不用方向键耶,手指不用离开主键盘区,速度又快了很多耶;哎哟,光标的定位好像更方便耶,编辑文档好像更快耶,查找替换更流畅耶,等等……信徒就是这样产生的。同时也发现,Vim 这种充分利用键盘上的字母当命令的方式好像确实很神奇耶,并且命令不少,几乎键盘上的每一个按键都有它的意义。有哪些命令呢?我放个图片毒你们一下:
有人可能会说,我英文很差呀,这全英文的文档我读不懂怎么办啊?不用着急,Vim 流行了这么多年,中文文档确定是有的啦。Github 上有一个 Vim 中文文档计划 vimcdoc,你们能够直接去这里下载最新的中文文档。并且有 pdf 格式的,放到手机上慢慢看吧。
读了文档后会发现,Vim 不止我前面说的两种模式,除了 Normal 模式和 Insert 模式以外,还有可视模式、替换模式和命令模式。在 Normal 模式下按v
或者V
能够进入可视模式,能够用可视化的方式选择一块文本。在 Normal 模式下按R
就会进入替换模式,输入文字时会覆盖存在的字符。在 Normal 模式下按:
就会进入命令模式,除了:
,在 Normal 模式下按!
、/
和 ?
也能够进入命令模式,它们分别执行的是过滤、搜索和反向搜索。
好吧,关于 Vim 的学习我就写这么多,资料我是给足了的,至于可以达到什么高度就要看本身的修行了。反正我到如今也只是一个入门水平,不过够用了。下面是我以表格的形式整理的个人学习笔记,都是经常使用命令。
usr_01.txt 关于 Vim 帮助手册的简单介绍
命令 | 功能 |
---|---|
CTRL-] | 跳转到当前光标下的标签 |
CTRL-O | 回跳(重复这个操做能够回跳屡次) |
:set compatible? | 查看 Vim 是否关闭了对 Vi 的兼容 |
:scriptnames | 查看配置文件的位置和文件名 |
usr_02.txt Vim 初步,讲一些简单的命令
命令 | 功能 |
---|---|
i | 从普通模式进入插入模式,在当前光标前插入文本 |
:set showmode | 开启模式提示,便于用户知道本身在什么模式 |
<Esc> | 回到普通模式,敲一次不行就敲两次 |
h | 向左移动光标 |
j | 向下移动光标 |
k | 向上移动光标 |
l | 向右移动光标 |
x | 删除光标处的字符 |
dd | 删除一行 |
J | 删除一个换行符,把两行连起来 |
u | 撤销以前的操做 |
CTRL-R | 重作,就是撤销以前的撤销操做 |
a | 在光标以后添加字符 |
o | 在当前行的下方创建一个新的空行,并进入插入模式 |
O | 在当前行的上方创建一个新的空行,并进入插入模式 |
1-9 | 在命令前加一个数字,表示重复这个命令相应的次数 |
ZZ | 保存文件并退出 |
:q! | 放弃修改并退出 |
usr_03.txt 主要是讲怎么在文件中快速移动的
命令 | 功能 |
---|---|
w | 移动到下一个单词的词首 |
b | 移动到上一个词的词首 |
e | 移动到下一个词的词尾 |
ge | 移动到上一个词的词尾 |
:set iskeyword | 定义哪些字符容许出如今单词中,而不是单词分隔符 |
W | 移动到以空白符分割的下一个词的词首 |
B | 移动到以空白符分割的上一个词的词首 |
E | 移动到以空白符分割的下一个词的词尾 |
gE | 移动到以空白符分割的上一个词的词尾 |
\$ | 移动到当前行的行尾 |
^ | 移动到当前行的第一个非空白字符 |
0 | 移动到当前行的行首 |
f | 向前查找并移动到一个指定的字符 |
F | 向后查找并移动到一个指定的字符 |
t | 向前查找一个字符并移动到这个字符的前一个字符上 |
T | 向后查找一个字符并移动到这个字符的后一个字符上 |
; | 重复上面的四个命令 |
, | 反向重复上面的四个命令 |
% | 移动到匹配的 ()、[]、{}上 |
G | 移动到文件最后一行 |
gg | 移动到文件的第一行 |
数字+% | 移动到文件的百分之多少 |
数字+G | 移动到指定的行 |
H | 移动到当前窗口的第一行 |
M | 移动到当前窗口的中间一行 |
L | 移动到当前窗口的最后一行 |
CTRL-G | 肯定当前位置 |
:set number | 显示行号 |
:set ruler | 在右下角显示当前光标的位置 |
CTRL-U | 向下滚动半屏 |
CTRL-D | 向上滚动半屏 |
CTRL-E | 向上滚动一行 |
CTRL-Y | 向下滚动一行 |
CTRL-F | 向前滚动一整屏 |
CTRL-B | 向后滚动一整屏 |
zt | 把光标所在的行移动到屏幕顶部 |
zz | 把光标所在的行移动到屏幕中间 |
zb | 把光标所在的行移动到屏幕底部 |
/ | 查找匹配的字符串 |
? | 反向查找匹配的字符串 |
n | 重复上面的查找 |
N | 反向重复上面的查找 |
:set ignorecase | 查找时忽略大小写 |
* | 查找当前光标所在的单词 |
# | 反向查找当前光标所在的单词 |
:set hlsearch | 查找时高亮显示全部匹配的地方 |
:set incsearch | 在输入字符串的过程当中就显示匹配点 |
:set nowrapscan | 正向查找时,到文件结尾就中止查找,反向查找是,到文件开头就中止查找 |
:nohlsearch | 关闭高亮显示 |
' ' | 跳回原来的地方,反复使用能够在两个位置上跳来跳去 |
CTRL-O | 跳到一个较老的地方 |
CTRL-I | 跳到一个较新的地方 |
:jumps | 列出全部可跳往的位置 |
m | 放置位置标记,位置标记能够是 a 到 z 共 26 个 |
' | 跳转到位置标记 |
:marks | 列出全部的位置标记 |
' " | 跳到最后编辑的光标位置 |
' [ | 跳到最后修改的开始位置 |
' ] | 跳到最后修改的结束位置 |
这一章的命令主要讲的是怎么移动光标,也就是 {motion} ,有两点说明:一是移动光标的命令前面能够加数字,表示重复移动的次数;二是查找单词时,使用\<
匹配单词开头,使用\>
匹配单词结尾,使用^
匹配一行的开头,使用$
匹配一行的结尾,使用.
匹配任意字符,而对于单词中的特殊字符须要转义。
usr_04.txt 这一章主要讲操做和移动的结合使用。前面学过的d
就是操做,这里记做 {operator},表示删除,w
就是移动,这里记做 {motion},表示移动一个单词。因此dw
就是删除一个单词。操做命令和移动命令前面都能加数字,表示重复的次数,这里记做 [n]。因此操做和移动相结合遵循以下模式:[n] {operator} [n] {motion}
。
命令 | 功能 |
---|---|
d4w | 删除 4 个单词 |
d\$ | 删除到行尾 |
c | 修改文本 |
x | 表示 dl,删除当前光标下的字符 |
X | 表示 dh,删除光标左边的字符 |
D | 表示 d\$ ,删除到行尾 |
C | 表示 c\$ ,修改到行尾 |
s | 表示 cl,修改一个字符 |
S | 表示 cc,修改一整行 |
r | 替换一个字符 |
. | 重复最后一次的修改操做 |
v | 启动可视模式 |
V | 启动按行选择的可视模式 |
CTRL-V | 启动按块选择的可视模式 |
可视模式下的 o 和 O | 把光标移动到被选择文字的另外一端 |
p | 粘贴到光标的后面 |
P | 粘贴到光标的前面 |
y | 拷贝 |
yy | 拷贝一整行 |
Y | 表示 y\$ ,拷贝到行尾 |
"* | 使用全局剪切板 |
R | 进入替换模式 |
~ | 修改光标下字符的大小写,并移动到下一个字符,后面不能跟移动指令 |
I | 移动到当前行的第一个非空字符并启动插入模式 |
A | 移动到行尾并启动插入模式 |
操做后面还能够接文本对象。文本对象有哪些呢?见下表:
文本对象 | 意义 |
---|---|
a" | 双引号字符串 |
a’ | 单引号字符串 |
a( | 等同于 ab |
a) | 等同于 ab |
a< | "一个 <> 块" 从 ’<’ 到匹配的 ’>’ |
a> | 等同于 a< |
aB | "一个大块" 从 "[{" 到 "]}" (带上括号) |
aW | "一个字串" (带上空白) |
a[ | "一个 [] 块" 从 ’[’ 到匹配的 ’]’ |
a] | 等同于 a[ |
a` | 反引号字符串 |
ab | "一个块" 从 "[(" 到 "])" (带上括号) |
ap | "一个段落" (带上空白) |
as | "一个句子" (带上空白) |
at | "一个标签块" (带上空白) |
aw | "一个单词" (带上空白) |
a{ | 等同于 aB |
a} | 等同于 aB |
i" | 双引号字符串,不带引号 |
i’ | 单引号字符串,不带引号 |
i( | 等同于 ib |
i) | 等同于 ib |
i< | "内含 <> 块" 从 ’<’ 到匹配的 ’>’ |
i> | 等同于 i< |
iB | "内含大块" 从 "[{" 到 "]}" |
iW | "内含字串" |
i[ | "内含 [] 块" 从 ’[’ 到匹配的 ’]’ |
i] | 等同于 i[ |
i` | 反引号字符串,不带反引号 |
ib | "内含块" 从 "[(" 到 "])" |
ip | "内含段落" |
is | "内含句子" |
it | "内含标签块" |
iw | "内含单词" |
i{ | 等同于 iB |
i} | 等同于 iB |
usr_05.txt 这一章主要是讲配置文件的。这一章你们看一看就能够了,不用记。我以为有必要设置的选项我已经放到配置文件中了。关于安装插件的内容,了解便可。
usr_06.txt 关于设置语法高亮的。了解便可。
usr_07.txt 这一章是讲编辑多个文件的。
命令 | 功能 |
---|---|
:edit | 打开一个文件 |
:edit! | 放弃对当前文件的修改,打开另外一个文件 |
:hide edit | 不放弃对当前文件的修改,隐藏当前文件,打开另外一个文件 |
:next | 能够在启动 Vim 的时候打开一堆文件,使用该命令在文件之间切换 |
:write | 保存当前文件 |
:wnext | 先保存,再切换到下一个文件 |
:next! | 放弃对当前文件的修改,切换到下一个文件 |
:args | 查看整个文件列表,后面跟文件名能够编辑另一个文件列表 |
:previous | 切换到上一个文件 |
:first | 切换到第一个文件 |
:last | 切换到最后一个文件 |
:set autowrite | 设置自动保存 |
CTRL-^ | 在两个文件间快速跳转 |
' " | 跳转到上次离开这个文件时的位置 |
' . | 跳转到最后一次修改文件的位置 |
m | 后面跟大写字母能够设置在全部文件中共享的位置标记 |
:marks | 查看位置标记 |
" | 使用寄存器进行复制粘贴,后面可跟小写字母 a 到 z |
:saveas | 另存为 |
:file | 把当前文件用另外的名字建一个新文件进行编辑,不当即保存 |
usr_08.txt 这一章讲窗口和标签页的,其中关于调整窗口宽度的快捷键是我在 index.txt 中找出来的。
命令 | 功能 |
---|---|
:split | 垂直分割窗口 |
CTRL-W w | 在窗口之间跳转 |
:close | 关闭窗口 |
:only | 关闭其它窗口 |
CTRL-W + | 增长窗口高度 |
CTRL-W - | 减小窗口高度 |
{height}CTRL-W _ | 指定窗口高度 |
:vsplit | 水平分割窗口 |
CTRL-W h/j/k/l | 跳转到上下左右的窗口 |
CTRL-W t/b | 跳转到最顶上或最底部的窗口 |
CTRL-W H/J/K/L | 把当前窗口移动到最左边最下边最上边最右边 |
CTRL-W > | 增长当前窗口的宽度 |
CTRL-W < | 减小当前窗口的宽度 |
:tabedit | 新建标签页 |
:tab split | 新建标签页 |
usr_09.txt 使用 GUI 版本。了解便可。关于 GUI 的设置就不啰嗦了,我主要是取消了滚动条。另外,这一章讲到了当前选区和真剪切板的概念,主要是熟悉两个寄存器"*
和"+
。
usr_10.txt 其它一些修改文件的手段,包括录制命令和回放命令
命令 | 功能 |
---|---|
q{register} | 记录命令,{register}可使用小写字母 a 到 z |
@{register} | 回放记录的命令 |
@@ | 回放刚执行的命令 |
:[range]substitute/from/to/[flags] | 替换字符串,涉及的信息量比较多,请自行阅读文档 |
:[range]global/{pattern}/{command} | 找到一个匹配点,并在那里执行一个命令 |
> | 把选中的文本右移一个“平移单位 ” |
< | 把选中的文本左移一个“平移单位” |
:read | 读取文件到当前文件 |
gq | 自动排版命令 |
gu/gU | 改变大小写 |
! | 过滤操做 |
:! | 执行外部命令 |
:read !{command} | 读取外部命令的输出到当前文档 |
usr_11.txt 从崩溃中恢复,了解便可。
usr_12.txt 关于使用 Vim 的一些小窍门,了解便可。
usr_20.txt 关于命令行编辑、命令行缩写、命令行补全、命令行历史的,了解便可。须要记住一个打开命令行窗口的命令。
命令 | 功能 |
---|---|
q: | 打开命令行窗口 |
usr_21.txt 离开和返回
命令 | 功能 |
---|---|
CTRL-Z | 挂起 Vim,回到 Shell |
fg | 从 Shell 回到 Vim |
其它关于会话和视图的内容,了解便可。关于 modeline 的内容了解一下。
usr_22.txt 讲 netrw 文件浏览器的,了解一下便可。还有多缓冲区编辑的命令。
命令 | 功能 |
---|---|
:buffers | 查看缓冲区列表 |
:ls | 同上 |
:buffer {number} | 编辑缓冲区,也可使用文件名 |
:bnext | 编辑下一个缓冲区 |
:bprevious | 编辑上一个缓冲区 |
:bfirst | 编辑第一个缓冲区 |
:blast | 编辑最后一个缓冲区 |
:bdelete | 删除缓冲区 |
usr_23.txt 编辑特殊文件,Vim 功能挺强大的,能够编辑网络文件、加密文件、二进制文件、压缩文件等,了解一下便可。
usr_24.txt 快速插入,如下快捷键都是在插入模式下执行的。
命令 | 功能 |
---|---|
CTRL-W | 快速删除一个单词 |
CTRL-U | 快速删除到行首 |
CTRL-P | 自动补全,搜索匹配的单词 |
CTRL-N | 自动补全,反向搜索匹配的单词 |
CTRL-X CTRL-F | 自动补全文件名 |
CTRL-X CTRL-L | 自动补全整行 |
CTRL-X CTRL-D | 自动补全宏定义 |
CTRL-X CTRL-I | 自动补全当前文件及所包含的文件 |
CTRL-X CTRL-K | 自动补全字典文件内的单词 |
CTRL-X CTRL-T | 自动补全同义词词典文件内的单词 |
CTRL-X CTRL-] | 自动补全标签 |
CTRL-X CTRL-V | 自动补全 Vim 命令行 |
CTRL-X CTRL-O | 自动补全程序代码 |
CTRL-A | 把上次在插入模式下输入的文本再输入一次 |
CTRL-@ | 同上,但插入后退出插入模式 |
CTRL-Y | 从光标上面一行拷贝 |
CTRL-E | 从光标下面一行拷贝 |
CTRL-R | 插入寄存器里面的内容 |
CTRL-O | 在插入模式下执行普通模式的命令 |
关于缩写功能,由于用得少,我这里就没有总结出来。并且从这里能够看到,Vim 自带的补全功能仍是很强大的,可是咱们用自动补全的插件代替了,因此这些快捷键用得少。
usr_25.txt 编辑带格式的文本,了解一下便可。记住其中增长缩进和减小缩进的命令,这个用得比较多。
命令 | 功能 |
---|---|
>> | 增长当前行的缩进,前面带数字能够缩进多行 |
<< | 减小当前行的缩进,前面带数字能够缩进多行 |
usr_26.txt 重复,了解一下便可。
usr_27.txt 查找命令即模式,了解一下便可。
usr_28.txt 折叠
命令 | 功能 |
---|---|
zf | 产生一个折叠 |
zo | 展开折叠的内容 |
zc | 折叠展开的内容 |
zr | 减小折叠 |
zm | 增长折叠 |
zR | 展开全部嵌套的折叠 |
zM | 关闭全部的折叠 |
折叠有不少方法,能够按缩进进行折叠,也能够按标志进行折叠,也能够按语法进行折叠。了解一下便可。
usr_29.txt 在代码间移动。主要是使用 tags,我前面已经讲过 ctags 程序和 tagbar 插件。可是这里讲到了预览窗口,值得学习一下。
命令 | 功能 |
---|---|
:ptag | 打开预览窗口显示函数信息 |
CTRL-W } | 打开预览窗口显示函数信息 |
:pclose | 关闭预览窗口 |
:pedit | 在预览窗口中编辑一个文件 |
:psearch | 在预览窗口中搜索 |
] 开头和 [ 开头的命令 | 在程序中跳转 |
usr_30.txt 编辑程序,主要是和 quickfix 有关的命令和缩进有关的命令。
命令 | 功能 |
---|---|
:cnext | 将光标移动到下一个错误所在的行 |
:cc | 查看详细的出错信息 |
:clist | 列出全部的出错信息 |
:set cindent siftwidth=4 | 设置 C 风格的缩进 |
= | 自动对选定的范围进行缩进 |
> | 增长缩进 |
< | 减小缩进 |
:set expandtab | 将<Tab>展开为空格 |
CTRL-T | 在插入模式下,增长一个缩进 |
CTRL-D | 在插入模式下,减小一个缩进 |
usr_31.txt 利用 GUI,了解一下。
usr_32.txt 撤销树,了解一下。
usr_40.txt 建立新的命令,usr_41 编写 Vim 脚本,usr_42.txt 添加新的菜单,对于有志于编写插件的朋友能够学一下,至关于又多学了一门编程语言。对于我这样的懒人,从这里开始到后面的内容我都跳过了。
读完 Vim 帮助中的 usr_toc 系列,并作好笔记,大概须要两天时间吧。惟一的问题是若是不常常用的话,很快就会忘记了。必要时能够隔一段时间再读一遍。若是须要更详细地了解 Vim 的全部内容,能够参考 quickref.txt 和 index.txt 中的内容,也能够读其它的专题内容。
最后,再向你们推荐一个比我总结得更好的 Vim 学习资料:vim-galore-zh_cn。
我对此次写的这个系列要求是很是高的:首先内容要有意义、够充实,信息量要足够丰富;其次是每个知识点要讲透彻,不能模棱两可含糊不清;最后是包含丰富的截图,让那些不想装 Linux 系统的朋友们也能够领略到 Linux 桌面的风采。若是个人努力获得你们的承认,能够扫下面的二维码打赏一下:
该随笔由京山游侠在2018年09月11日发布于博客园,引用请注明出处,转载或出版请联系博主。QQ邮箱:1841079@qq.com