Vim 总结

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文件
    1
    2
    sudo sh (会提示你输入当前用户的密码)
    mkdir ~/.vimrc
    也可以将全局版vimrc文件复制到用户主目录下做为用户版vimrc:
    1
    sudo cp  /usr/share/vim/vimrc  ~/.vimrc

    这里说明一下,~/就是用户主目录,相当于/Users/用户名/。


基本使用

执行命令:vimtutorvimtutor 是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)x
  • Fx 表示前一个
  • 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 撤消最后执行的(一次)命令。 undo
  • U 恢复到该行的原始状态
  • 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字符

块操作

  1. 0 到行首
  2. Ctrl + v 开始 块操作
  3. h j k l 选择块大小
  4. I 插入,输入插入内容,选中相关的行 (可使用 j 或 或是 /pattern 或是 % 等……)
  5. 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插件管理工具

参考github 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
set nocompatible              " be iMproved, required
filetype off " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'

" The following are examples of different formats supported.
" Keep Plugin commands between vundle#begin/end.
" plugin on GitHub repo
Plugin 'tpope/vim-fugitive'
" plugin from http://vim-scripts.org/vim/scripts.html
Plugin 'L9'
" Git plugin not hosted on GitHub
Plugin 'git://git.wincent.com/command-t.git'
" git repos on your local machine (i.e. when working on your own plugin)
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
" Install L9 and avoid a Naming conflict if you've already installed a
" different version somewhere else.
Plugin 'ascenator/L9', {'name': 'newL9'}

" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
  • 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
2
3
4
5
6
7
8
9
10
11
" 在 vim 启动的时候默认开启 NERDTree(autocmd 可以缩写为 au)
autocmd VimEnter * NERDTree

" 按下 F2 调出/隐藏 NERDTree
map :silent! NERDTreeToggle

" 将 NERDTree 的窗口设置在 vim 窗口的右侧(默认为左侧)
let NERDTreeWinPos="right"

" 当打开 NERDTree 窗口时,自动显示 Bookmarks
let NERDTreeShowBookmarks=1

以下的大部分快捷键都需要将光标置于目录上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
和编辑文件一样,通过h j k l移动光标定位


切换标签页
:tabnew [++opt选项] [+cmd] 文件 建立对指定文件新的tab
:tabc 关闭当前的 tab
:tabo 关闭所有其他的 tab
:tabs 查看所有打开的 tab
:tabp 前一个 tab
:tabn 后一个 tab
标准模式下:
gT 前一个 tab
gt 后一个 tab

Ctrl + e 打开/关闭文件浏览器
Ctrl + C 即大写字母C,当前选中目录作为根目录

o 在已有窗口中打开文件、目录或书签,并跳到该窗口
go 在已有窗口 中打开文件、目录或书签,但不跳到该窗口
t 在新 Tab 中打开选中文件/书签,并跳到新 Tab
T 在新 Tab 中打开选中文件/书签,但不跳到新 Tab
i split 一个新窗口打开选中文件,并跳到该窗口
gi split 一个新窗口打开选中文件,但不跳到该窗口
s vsplit 一个新窗口打开选中文件,并跳到该窗口
gs vsplit 一个新 窗口打开选中文件,但不跳到该窗口
! 执行当前文件
O 递归打开选中 结点下的所有目录
x 合拢选中结点的父目录
X 递归 合拢选中结点下的所有目录
e Edit the current dif

双击 相当于 NERDTree-o
中键 对文件相当于 NERDTree-i,对目录相当于 NERDTree-e

D 删除当前书签

P 跳到根结点
p 跳到父结点
K 跳到当前目录下同级的第一个结点
J 跳到当前目录下同级的最后一个结点
k 跳到当前目录下同级的前一个结点
j 跳到当前目录下同级的后一个结点

C 将选中目录或选中文件的父目录设为根结点
u 将当前根结点的父目录设为根目录,并变成合拢原根结点
U 将当前根结点的父目录设为根目录,但保持展开原根结点
r 递归刷新选中目录
R 递归刷新根结点
m 显示文件系统菜单
cd 将 CWD 设为选中目录

I 切换是否显示隐藏文件
f 切换是否使用文件过滤器
F 切换是否显示文件
B 切换是否显示书签

q 关闭 NerdTree 窗口
? 切换是否显示 Quick Help

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
2
3
4
5
6
7
8
9
<F5> 清除当前目录下的缓存,获取新的结构
<c-f>和<c-b> 在各个模式下转换
<c-d> 使用文件名搜索代替全路径搜索
<c-r> 使用正则模式
<c-j>和<c-k> 上下选择文件
<c-t> <c-v>和<c-x> 在新的tab或者新的分割窗口打开选择的文件
<c-n>和<c-p> 找到之前或者之后查找的字符串
<c-y> 创建一个新的文件
<c-z> 标记或者取消标记多个文件然后使用<c-o>打开它们

使用:help ctrlp-mappings和?获得更多的映射帮助 以上说的模式和vim本身的模式不是一个概念

1
2
3
4
unzip NERD_tree.zip 
mkdir -p ~/.vim/plugin # 如果沒有 plugin 的目录,就建立一个
mv plugin/NERD_tree.vim ~/.vim/plugin # 将NERD_tree.vim 移近去即可
开启 Vim 后, 输入 :NERDTree 就看到了

Powerline

Powerline是一个显示vim状态栏插件,它能够显示vim模式、操作环境、编码格式、行数/列数等信息

本文标题:Vim 总结

文章作者:史彦超

发布时间:2016年10月11日 - 22:10

最后更新:2021年07月20日 - 16:07

原始链接:https://doingself.github.io/2016/10/11/2016-10-11-Vim-%E6%80%BB%E7%BB%93/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Donate comment here