Vim 总结
配置Vim,首先要知道三个配置文件:vimrc
gvimrc
exrc
这些配置文件的位置由Vim的安装位置和操作系统决定。
vimrc
vimrc是Vim最主要的配置文件,它有两个版本:全局版本(global)和用户版本(personal)。
全局vimrc文件在Vim的安装目录中,我的电脑是Mac,所以其路径是 /usr/share/vim/vimrc
打开Vim,在普通模式(Normal)下输入echo $VIM
得到全局vimrc的位置注意大小写用户版本的vimrc文件在当前用户的主目录下,主目录的位置依赖于操作系统。Mac下的用户vimrc文件路径为:/Users/用户名/.vimrc(文件名前面的”.”代表这个文件是隐藏文件)
你可以在Vim的普通模式下输入echo $HOME
查找用户主目录的位置
但是Mac下默认是没有用户vimrc的,所以需要你自己创建一个。
不管怎么改用户版的vimrc文件,其中的内容都是是覆盖在全局vimrc文件中设置的内容,这就意味着你可以不需要去改变全局vimrc文件来进行配置vim,只需要修改用户vimrc文件。
gvimrc
gvimrc文件是Gvim的配置文件,和vimrc很相似,并且是放在同一个目录下的,也分为全局版和用户版。这个文件是用来设置只有Gvim才能使用的GUI设置。
exrc
exrc文件是用作与vi或ex向后兼容的,它也和vimrc放在同一个目录,当然也分全局版和用户版。然而,除非你想用vi兼容的模式来使用Vim,否则你更本不会用到这个文件。当然一般人都不会用vi兼容模式来使用Vim的。
配置Vim
- 创建用户版vimrc(Mac下默认是没有的)
你可以在用户主目录下自己创建一个空的用户版vimrc文件也可以将全局版vimrc文件复制到用户主目录下做为用户版vimrc:1
2sudo sh (会提示你输入当前用户的密码)
mkdir ~/.vimrc1
sudo cp /usr/share/vim/vimrc ~/.vimrc
这里说明一下,~/就是用户主目录,相当于/Users/用户名/。
基本使用
执行命令:vimtutor
。vimtutor
是vim使用入门教程。
以字为单位的移动
h
向 左 移动一个 字j
向 下 移动一 行k
向 上 移动一个 字l
向 右 移动一 行
以词为单位的移动
w
下一個word开头 w(ord)W
下一個word(跳过标点)e
下一個/当前 word尾端 e(nd)E
下一個/当前 word尾端 (跳过标点)b
前一個/当前 word开头 b(ackward)B
前一个/当前 word开头 (跳过标点)
行内移动
0
跳到当前行的开头(第0个字符)^
跳到当前行第一个非空字符$
跳到行尾g_
跳到行尾,非空字符n + 空格
将光标向后移动n个字符
跳跃移动
%
跳到当前对应的括号上(适用各种配对符号){
上一段(以空白行分隔)}
下一段(以空白行分隔)ctrl + f
向下翻一页ctrl + b
向上翻一页ctrl + d
向下翻半页 d(down)ctrl + u
向上翻半页 u(p)+
下一行,非空,行首gd
跳到光标所在位置词(word)的定义位置 g(o)d(efine)Ctrl + o
回到您之前的位置,可以重复按Ctrl + i
跳转到较新的位置gg
到文档顶部,第一行G
到文档底部,最后一行:x
跳到第x行(x是行号)xG
跳到第x行(x是行号)M
将光标移动到屏幕中间行
搜索
/xxxx
搜索xxxx,然后可以用n下一个,N上一个移动,输入: set ic
忽略大小写(Ignore Case),输入: set is
部分匹配(incsearch),输入: set hls
启用高亮(hlsearch),在选项前加上 no 可以关闭选项如:set noic
?xxxx
逆向搜索xxxx,然后可以用n下一个,N上一个移动#
向前搜索光标当前所在的字*
向后搜索光标当前所在的字fx
移动到下一个字符x的位置 f(ind)xFx
表示前一个tx
移动到下一个字符x前的位置Tx
表示前一个
替换
r
替换一个字符,输入 r 和要替换成的字符,这样就能将错误替换掉了。R
替换光标下的字符(逐一替换)cw
替换单词,从光标所在位置后到一个单词结尾的字符:s/old/new <回车>
替换 old 为 new,光标所在行的第一个匹配串。:s/old/new/g <回车>
替换 old 为 new,光标所在行的全部匹配串。:%s/old/new/g
替换整个文件中的每个匹配串。:%s/old/new/gc
会找到整个文件中的每个匹配串,并且对每个匹配串提示是否进行替换。
撤销重做
u
撤消最后执行的(一次)命令。 undoU
恢复到该行的原始状态Ctrl + r
可以重做被撤消的命令,也就是撤消掉撤消命令
删除
x
删除当前字符,向后删X
删除当前字符,向前删D
删除从当前位置到行尾dd
删除当前行 d(elete),并复制到剪切板dw
从当前光标当前位置 直到 下一个单词 起始处,不包括它的第一个字符。de
从当前光标当前位置 直到 单词 末尾,包括最后一个字符。d$
从当前光标当前位置 直到 当前 行末
选择文本
v
不规则选择V
按行选择Ctrl + V
按列选择gU
将选择的变大写gu
将选择的变小写~
转换大小写J
把所有的行连接起来(变成一行)<
或者>
左右缩进=
自动缩进,格式化代码w FileName
将选择的部分,另存为一个文件,选择文本后输入:
,显示:'<,'>
,输入w FileName <回车>
这时vim会把选中的内容写入FileName中
复制粘贴
y
将选择的复制yy
复制当前行 y(ank)yw
复制当前光标下的词 y(ank)w(ord)"+y
将选中的文本复制到系统剪切板,可以粘贴到外部文件p
粘贴 p(aste)P
粘贴在当前位置之前"+p
将已复制的外部文件内容,粘贴到vim中
进入编辑模式
i
在光标当前位置 前 插入 i(nsert)I
在本行第一个字符前插入a
在光标当前位置 后 插入 a(fter)A
在本行末尾插入s
删除当前字符,并开始插入S
删除当前行所有内容,并开始插入o
向下插入一行O
向上插入一行C
删除当前字符到行尾,并开始插入
文件操作
:w
保存:w FileName
保存为 FileName:q
退出:wq
保存并退出:e <path/to/file>
打开一个文件:saveas <path/to/file>
另存为 <path/to/file>:x,ZZ 或 :wq
保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车):q!
退出不保存:qa!
强行退出所有的正在编辑的文件,就算别的文件有更改。:bn 和 :bp
你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。:r FileName
将FileName的文件内容合并到当前光标下面一行:r !ls
将 ls 命令的输出内容 合并到 光标下面一行
重复操作
.
(小数点) 可以重复上一次的命令N<command>
重复某个命令N次5w
相当于按五次w键;6j
下移6行,相当于按六次j;3J
大写J,本来是将下一行与当前行合并,加上数量,就是重复操作3次;6dw和d6w
结果是一样,就是删除6个word
高效编辑
di"
光标在”“之间,则删除”“之间的内容,i(nner)yi(
光标在()之间,则复制()之间的内容,i(nner)vi[
光标在[]之间,则选中[]之间的内容,i(nner)dtx
删除字符直到遇见光标之后的第一个x字符ytx
复制字符直到遇见光标之后的第一个x字符
块操作
0
到行首Ctrl + v
开始 块操作h j k l
选择块大小I
插入,输入插入内容,选中相关的行 (可使用 j 或或是 /pattern 或是 % 等……) ESC
为 块的每一行生效
自动提示
在 Insert 模式下,输入一个词,按 Ctrl+n
向下选择提示 或者 Ctrl+p
向上选择提示
标记和宏(macro)
ma
将当前位置标记为a,26个字母均可做标记,mb、mc等等;'a
跳转到a标记的位置;- 这是一组很好的文档内标记方法,在文档中跳跃编辑时很有用;
qa
将之后的所有键盘操作录制下来,直到再次在命令模式按下q,并存储在a中;@a
执行刚刚记录在a里面的键盘操作;@@
执行上一次的macro操作;- 宏操作是VIM最为神奇的操作之一,需要慢慢体会其强大之处;
分屏
ctrl + w c
关闭当前窗口ctrl + w h/j/k/l
光标移动到 hjkl 窗口ctrl + w w
光标移动到 下一个 窗口
ctrl + w H/J/K/L
当前窗口移动到 H J K L 位置ctrl + w r
移动当前窗口的布局位置
ctrl + w =
让所有的屏都有一样的高度ctrl + w +
增加高度ctrl + w -
减少高度ctrl + w <
增加宽度ctrl + w >
减少宽度
在vim内执行外部命令
:!ls
执行外部 sheel 命令,如: ls
插件配置
现在大部分的插件都已经从 Vim.org 迁移到了 Vim-Script.org
Vundle插件管理工具
vundle是vim的插件管理工具,它能够搜索、安装、更新和移除vim插件,再也不需要手动管理vim插件。
Introduction:
Installation requires Git and triggers git clone for each configured repository to ~/.vim/bundle/ by default. Curl is required for search.
If you are using Windows, go directly to Windows setup. If you run into any issues, please consult the FAQ. See Tips for some advanced configurations.
Using non-POSIX shells, such as the popular Fish shell, requires additional setup. Please check the FAQ.Set up Vundle:
1
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Configure Plugins:
Put this at the top of your .vimrc to use Vundle. Remove plugins you don’t need, they are for illustration purposes.
1 | set nocompatible " be iMproved, required |
Install Plugins:
Launch vim and run:PluginInstall
To install from command line:vim +PluginInstall +qall
其他命令
更新插件:BundleUpdate
清除不再使用的插件:BundleClean
列出所有插件:BundleList
查找插件:BundleSearch
spf13-vim
spf13-vim是Vim插件与配置的一个发行版本,包含了一整套精心挑选的Vim插件,采用Vundle进行插件管理
参考 github spf13-vim
Linux, unix, Mac OSX Installation
- Requires Git 1.7+ and Vim 7.3+
1
curl https://j.mp/spf13-vim3 -L > spf13-vim.sh && sh spf13-vim.sh
- If you have a bash-compatible shell you can run the script directly:
1
sh <(curl https://j.mp/spf13-vim3 -L)
Undotree
Undotree 是一个不错插件,可以以一棵树的形式看到你的undo和redo历史。
NERDTree
The NERD tree 文件目录插件,输入:NERDTree
,即可呼出执行Vim命令的当前目录的文件目录。
- 在官网下载
- install detailsUnzip the archive into your ~/.vim directory.
- That should put NERD_tree.vim in ~/.vim/plugin and NERD_tree.txt in ~/.vim/doc. “
NerdTree 在 .vimrc 中的常用配置
1 | " 在 vim 启动的时候默认开启 NERDTree(autocmd 可以缩写为 au) |
以下的大部分快捷键都需要将光标置于目录上。
1 | 和编辑文件一样,通过h j k l移动光标定位 |
ctrlp
相较于Command-T等查找文件的插件,ctrlp.vim最大的好处在于没有依赖,干净利落
在vim normal模式下,按下ctrl+p,然后输入你要寻找的文件就行了
使用:CtrlP或:CtrlP [starting-directory]调用CtrlP进入查找文件模式
使用:CtrlPBuffer或:CtrlPMRU进入查找buffer或者查找MRU文件模式
使用:CtrlPMixed同时搜索普通文件、Buffers或者MRU文件
可以使用:help ctrlp-commands和:help ctrlp-extensions查看其他命令帮助
一旦CtrlP被打开了,就可以使用以下的命令
1 | <F5> 清除当前目录下的缓存,获取新的结构 |
使用:help ctrlp-mappings和?获得更多的映射帮助 以上说的模式和vim本身的模式不是一个概念
1 | unzip NERD_tree.zip |
Powerline
Powerline是一个显示vim状态栏插件,它能够显示vim模式、操作环境、编码格式、行数/列数等信息