147. vim 命令
重要
使用已经写好的脚本安装,github地址
Readme上有使用方法
安装 vimmars
1 | git clone https://github.com/Qeuroal/vimmars.git |
安装 ycm
全部语言的安装
1 | cd ~/.vim/plugged/YouCompleteMe |
c/c++
1 | cd ~/.vim/plugged/YouCompleteMe |
推荐几个 Vim 配置方案
推荐另外几个出色的 Vim 教程
- 控制台运行
vimtutor
这是 Vim 官方实操教程 - 简明 Vim 练级攻略 很不错的入门教程
- Vim Galore 更新频繁,Vim 进阶必读
- 每日一Vim 共 30 篇,内容比较全
- Vim 教程网 一个女生维护的 Vim 中文教程网站,持续更新中
- A book for learning the Vim editor 另一个 Learn Vim (英语)
- Open Vim 交互式 Vim 教程
- QuickRef.ME/vim Vim cheatsheet
图片


自动命令
事件
类别 | 事件 | 触发条件 |
---|---|---|
读取 | BufNewFile | 编辑一个新文件时 |
读取 | BufReadPre | 读入新缓冲区之前 |
读取 | BufRead, BufReadPost | 读入新缓冲区之后 |
读取 | BufReadCmd | 开始编辑新缓冲区之前 |
读取 | FileReadPre | 使用:read命令读入文件之前 |
读取 | FileReadPost | 使用:read命令读入文件之后 |
读取 | StdinReadPre | 由标准输入设备读入缓冲区之前 |
读取 | StdinReadPost | 由标准输入设备读入缓冲区之后 |
写入 | BufWrite, BufWritePre | 将整个缓冲区写入文件时 |
写入 | BufWritePost | 将整个缓冲区写入文件之后 |
写入 | BufWriteCmd | 将整个缓冲区写入文件之前 |
缓冲区 | BufAdd, BufCreate | 将缓冲区加入缓冲区列表之后 |
缓冲区 | BufDelete | 从缓冲区列表中移除缓冲区之前 |
缓冲区 | BufEnter | 进入缓冲区之后 |
缓冲区 | BufLeave | 离开缓冲区之前 |
缓冲区 | BufWinEnter | 在窗口中显示缓冲区之后 |
缓冲区 | BufWinLeave | 从窗口中关闭缓冲区之前 |
缓冲区 | BufNew | 创建缓冲区之后 |
缓冲区 | BufUnload | 卸载缓冲区之前 |
选项 | FileType | 设置’filetype’选项之后 |
选项 | Syntax | 设置’syntax’选项之后 |
选项 | EncodingChanged | ‘encoding’选项改变之后触发命令; |
选项 | OptionSet | 设置任何选项之后 |
启动退出 | VimEnter | Vim启动并载入初始化文件之后 |
启动退出 | GUIEnter | 启动GUI之后 |
启动退出 | VimLeavePre | 改写viminfo文件之前,退出Vim之前 |
启动退出 | VimLeave | 改写viminfo文件之后,退出Vim之前 |
其他 | FileChangedShell | 当文件的最后修改时间等属性发生改变时 |
其他 | InsertEnter | 进入插入模式时 |
其他 | InsertLeave | 离开插入模式时 |
其他 | FocusGained | Vim成为当前窗口时 |
其他 | FocusLost | Vim不再是当前窗口时 |
其他 | WinEnter | 进入窗口时 |
其他 | WinLeave | 离开窗口时 |
其他 | CursorMoved | 在常规模式下移动光标时 |
其他 | CursorMovedI | 在插入模式下移动光标时 |
其他 | CursorHold | 当超过’updatetime’所指定时间用户没有输入时 |
其他 | vimResized | 窗口尺寸变化之后 |
示例
操作 | 事件 |
---|---|
启动Vim并创建默认窗口 | BufWinEnter |
创建默认缓冲区 | BufEnter |
:edit a.txt | VimEnter |
创建新缓冲区 | BufNew |
将新缓冲区加入到缓冲区列表之中 | BufAdd |
退出默认缓冲区 | BufLeave |
退出默认窗口 | BufWinLeave |
将默认缓冲区从缓冲区列表之中移除 | BufUnload |
删除默认缓冲区 | BufDelete |
将a.txt文件读入新缓冲区 | BufReadCmd |
激活新缓冲区 | BufEnter |
激活新窗口 | BufWinEnter |
进入插入模式 | InsertEnter |
输入文本 | CursorMovedI |
退出插入模式 | InsertLeave |
:wq | BufWriteCmd |
退出新窗口 | BufWinLeave |
将新缓冲区从缓冲区列表之中移除 | BufUnload |
准备退出Vim | VimLeavePre |
退出Vim | VimLeave |
命令模式常用快捷键
G
移动到文件的最后一行。nG
n为数字,移动到文件的第n行。gf
打开以光标所在字符串为文件名的文件gg
移动到文件的第一行。N[Enter]
向下移动N行。h
向左移动光标(←
)j
向下移动光标(↓
)k
向上移动光标(↑
)l(小L)
向右移动光标(→
)20j
向下移动20行+
或Enter
把光标移至下一行第一个非空白字符-
把光标移至上一行第一个非空白字符^
把光标移至本行第一个非空白字符0或Home
移动光标至行首$或End
移动光标至行尾w
向右移动一个单词,光标停在下一个单词开头W
向右移动一个单词,光标移动时忽略一些标点b
向左移动一个单词,光标停在下一个单词开头B
向左移动一个单词,光标移动时忽略一些标点e
向右移动一个单词,光标停在下一个单词末尾E
向右移动一个单词,光标移动时忽略一些标点ge
向左移动一个单词,光标停在下一个单词末尾gE
向左移动一个单词,光标移动时忽略一些标点H
移动光标至屏幕的最上方那一行行首M
移动光标至屏幕的最中间那一行行首L
移动光标至屏幕的最下方那一行行首(
移动光标至上一句)
移动光标至下一句{
移动光标至上一段}
移动光标至上一段ctrl+b
屏幕向上移动一页ctrl+f
屏幕向下移动一页ctrl+d
屏幕向上移动半页ctrl+u
屏幕向下移动半页ctrl+e
屏幕向下移动一行n%
到文件n%的位置,如1%,50%, 100%之类zz
将当前行移动到屏幕中央zt
将当前行移动到屏幕顶端zb
将当前行移动到屏幕底端dd
剪切当前行(不是删除,因为此时在缓存内保存了一份剪切的字符串)。d$
删除光标位置到该行最后一个字符(包括光标字元)。d0
删除光标字元至行首字符(不包括光标字元)。dG
删除光标所在行至最后一行所有字符(包括光标所在行)。d1G
删除光标所在行(包括光标所在行)与首行间所有字符。ndd
删除光标所在行(包括)向下的n行。dw
删除光标所在字符至下一个单词间所有字符(包括下一个单词前面的空格)。daw
剪切光标所在位置的单词。das
剪切光标所在位置的句子。x
向后删除一个字符。nx
向后删除n个字符。yy
复制当前行。nyy
复制n行(包含当前行)。y1G
复制第一行至当前行所有字符。yG
复制当前行到最后一行所有字符。y0
复制当前行行首字符至光标字符间所有字符。y$
复制当前行光标字符到行尾字符间所有字符。yaw
复制光标所在位置的单词。yas
复制光标所在位置的句子。ZZ
保存更改并退出。p
将已经复制的数据粘贴到光标的下一行(若是使用y0,y$复制的行的一部分,则粘贴时,会粘贴到光标所在行的光标字符后面)。P
将已经复制的数据粘贴到光标的上一行(若是使用y0,y$复制的行的一部分,则粘贴时,会粘贴到光标所在行的光标字符前面)。u
复原上一操作(撤消)。ctrl+R
重做上一操作。.
点号,重做上一操作。J
将当前行与下一行合并为一行。gJ
将当前行与下一行合并为一行,不过合并后不留空格。<<
段落向左缩进一个shiftwidth>>
段落向右缩进一个shiftwidthgq
对选中的长文字进行重排o
当前行下插入空行,并进入插入模式。O
当前行上插入空行,并进入插入模式。i
进入插入模式,从当前光标所在处插入。I
进入插入模式,从当前行第一个非空格处开始插入。a
进入插入模式,从当前光标所在处下一个字符开始插入。A
进入插入模式,从当前光标所在行最后一个字符开始插入。8i=<ESC>
重复输入小技巧,先按数字8
,再按i
进入插入模式,再按=
或其他字符,如=-
,再按Esc
退出键,再按一次键,就会出现8
次=-
组成的字符串。如=-=-=-=-=-=-=-=-
ESC健
返回命令模式。
编辑模式
在命令模式下按i
、o
、a
等键可进入插入模式(编辑模式)。
o
当前行下插入空行,并进入插入模式。O
当前行上插入空行,并进入插入模式。i
进入插入模式,从当前光标所在处插入。I
进入插入模式,从当前行第一个非空格处开始插入。a
进入插入模式,从当前光标所在处下一个字符开始插入。A
进入插入模式,从当前光标所在行最后一个字符开始插入。
另外按字母s
也可以进入插入模式:
s
小s,删除光标字符,并进入编辑模式,并在光标所在位置开始编辑。S
大S,删除光标所在行,并进入编辑模式,并在行首开始编辑。ns
删除包含光标字符在内的n个字符,并进入编辑模式。nS
大S,删除光标所在行在内及其后的n-1行,并进入编辑模式。
扩展命令模式常用操作键
:r filename
在当前位置插入另一个文件的内容:[n]r filename
在当前文件第n行插入另一个文件的内容:r !date
在光标处插入当前日期与日期,同理,:r !command
可以将其他shell
命令的输出插入到当前文档:r !cat filename|head -n N
在当前文件光标的下一行插入文件filename的前N行:w
保存:q
离开vim:q!
强制离开:wq
保存后离开:w [filename]
将当前文本另存为filename:n1,n2 w [filename]
将n1至n2行内容另存为filename:ce(nter)
本行文字居中:le(ft)
本行文字靠左:ri(ght)
本行文字靠右/word
向下查找关键字word。?word
向上查找关键字word。:n1,n2s/word1/word2/g
在第n1行与第n2行之间查找word1字符串,并直接替换为word2。:1,$s/word1/word2/g
在第1行最后一行之间查找word1字符串,并直接替换为word2。:1,$s/word1/word2/gc
在第1行最后一行之间查找word1字符串,并替换为word2(替换时询问用户是否替换)。:.,+5s/^/#/g
将当前行及下面5行标记为注释(包括当前行,共6行)。:6,9 de
删除第6至第9行。:2,8 co 10
复制第2行至第8行内容至第10行后面(从下一行开始):set nu
显示行号。:set nonu
不显示行号。:set hlsearch
高亮度搜索显示:set nohlsearch
不高亮度搜索显示:set autoindent/noautoindent
自动缩进:set ruler/noruler
设置右下角状态栏说明:set showmode/noshowmode
设置是否显示左下角(-INSERT-)状态列:set backspace=2
=2时,退格键可删除任意字符,=0或=1时只能删除刚输入的字符。:set
显示与系统预设值不同的设定参数。:set all
显示所有的环境参数值:syntax on/off
设置语法高亮:set bg=dark/light
设置背景(background)为暗色/亮色:set tabstop=4
设置Tab宽度:set shiftwidth=4
设置每一级缩进的宽度:Sex
水平分割一个窗口,浏览文件系统:Vex
垂直分割一个窗口,浏览文件系统
vimrc常用环境变量设置
- set hlsearch “设置高亮度反白
- set backspace=2 “可随时用退格键删除
- set ruler “可显示最后一行的状态
- set showmode “显示状态
- set nu “显示行号
- set bg=dark “显示不同的底色色调
- set softtabstop=4 “统一缩进为4
- set tabstop=4 “设置Tab宽度
- set shiftwidth=4 “设置每一级缩进的宽度
- set fileencodings=utf-8,gbk,gb18030,gk2312
- syntax on “语法高亮
- set showcmd “输入的命令显示出来,看的清楚些
- set clipboard+=unnamed “共享剪贴板
- set cursorline “突出显示当前行
- set noeb “去掉输入错误的提示声音
- set confirm “在处理未保存或只读文件的时候,弹出确认
- set autoindent “设置自动缩进
- set cindent “设置自动缩进
- set expandtab “用空格代替制表符
- set smarttab “在行和段开始处使用制表符
- set laststatus=2 “总是显示状态栏
~/.vimrc
配置文件内容如下:
1 | set hlsearch |
可视模式
- 可视模式(
Visual Black
),也即区块选择模式,此时可以对列字符进行操作。 - 在命令模式下,按
v
或V
或ctrl+v
可以进入到可视模式。 v
进入可视模式,并进行单字符(反白)选择。V
进入可视模式,并进行行(反白)选择。ctrl+v
进入可视模式,并进行区块选择,以长方形的方式(反白)选择字符。y
将反白的地方复制下来。d
删除反白区域。- 进入可视模式后,可以按方向键或
h
/j
/k
/l
(向左、向下、向上、向右)进行反白区域选择。
多视窗功能
- 输入
:sp
进入多视窗模式,此时,可以对文本进行前后对照或不同档案间进行对照。 :sp
同一文件两个视窗,进行前后对照。:sp [filename]
两个文件进行对照。
在多视窗模式下:
ctrl+w
可依次在多个视窗间进行上下循环切换。ctrl+w+k
可依次在多个视窗间进行从下到上切换(先按ctrl+w,松开后,再按k)。ctrl+w+j
可依次在多个视窗间进行从上到下切换(先按ctrl+w,松开后,再按j)。ctrl+w+q
关闭当前视窗下面的视窗(先按ctrl+w,松开后,再按q)。