147. vim 命令

重要

使用已经写好的脚本安装,github地址

Readme上有使用方法

安装 vimmars

1
2
3
git clone https://github.com/Qeuroal/vimmars.git
cd ~/vimmars
bash ./install.sh

安装 ycm

全部语言的安装

1
2
cd ~/.vim/plugged/YouCompleteMe
python3 ./install.py --all

c/c++

1
2
cd ~/.vim/plugged/YouCompleteMe
python3 ./install.py --clang-completer

推荐几个 Vim 配置方案

推荐另外几个出色的 Vim 教程

图片

自动命令

事件

类别 事件 触发条件
读取 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
  • >> 段落向右缩进一个shiftwidth
  • gq 对选中的长文字进行重排
  • o   当前行下插入空行,并进入插入模式。
  • O   当前行上插入空行,并进入插入模式。
  • i   进入插入模式,从当前光标所在处插入。
  • I   进入插入模式,从当前行第一个非空格处开始插入。
  • a   进入插入模式,从当前光标所在处下一个字符开始插入。
  • A  进入插入模式,从当前光标所在行最后一个字符开始插入。
  • 8i=<ESC> 重复输入小技巧,先按数字8,再按i进入插入模式,再按=或其他字符,如=-,再按Esc退出键,再按一次键,就会出现8=-组成的字符串。如=-=-=-=-=-=-=-=-
  • ESC健  返回命令模式。

编辑模式

在命令模式下按ioa等键可进入插入模式(编辑模式)。

  • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
set hlsearch
set backspace=2
set ruler
set showmode
set nu
set bg=dark
set softtabstop=4
set shiftwidth=4
set fileencodings=utf-8,gbk,gb18030,gk2312
syntax on
set showcmd
set clipboard+=unnamed
set cursorline
set confirm
set autoindent
set cindent
set expandtab
set laststatus=2

可视模式

  • 可视模式(Visual Black),也即区块选择模式,此时可以对列字符进行操作。
  • 在命令模式下,按vVctrl+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)。