vim常用操作汇总

光标移动

上下左右 k/j/h/l

行首 0 或者 ^

行尾 $

单词和字符串间移动

指令动作
w/W正向移动到下一个单词开头,大写的忽略特殊字符、符号等
b/B和w相对应的反向移动,移动到上一个单词开头
e/E正向移动到下一个单词结尾
ge反向移动
{num+} f/F+空格正向/反向移动到本行空格的地方,num相当于移动几次

move_inline

跳转

指令动作
ctrl+f向下翻页
ctrl+b向上翻页
ctrl+d/u向下/向上翻半页
gg文件行首
G最后一行
行号+gg/G都是跳到指定行号的行
g+ctrl+g/G查看光标位置,输出包含行、列、词、字节位置

缩进操作符

指令动作
» 和 « 或者 :> 和 :<当前行右缩进和左缩进,后者命令行模式
:line_num1,line_num1+x> 或者 :line_num>x命令行模式,批量缩进,缩进x行

复制粘贴

复制剪贴内容存于寄存器, :reg可以查看寄存器内容

指令动作
yy / 8yy复制/8行
dd / 8dd剪贴/8行
p/P粘贴到光标前/后
u撤销
ctrl+r重做
yw复制当前光标单词
y8w / y8W复制含当前光标的正向8个单词,大写W的含义和W移动含义相同(忽略一些符号)
x/4x/X剪贴单个字符/4个字符,大写就是反向
d{w/h/j/k/l}可以各种组合
d$/D删除光标到行尾
d^删除光标到行首

插入、查找、替换

插入

指令动作
I/A i/a行首、行尾插入,向前向后插入
o/O下一行、上一行插入
num + (i/I/A/a/o/O)多次插入,即重复插入多个字符或者多行

转换

指令动作
~单个字符大小写转换
g~w单词大小写反转
g~$ 或 g~~整行大小写反转
gU或gu + 回车整行转大写或小写
gU/uw单词转大写或小写,转换光标到词尾的部分

’.’:点操作符表示重复上一次操作

查找

组合键含义
f/F {字符}反向或正向查找一个字符
df{字符}删除光标到查找字符的位置直接的内容
/{字符串}命令行模式查找

替换

命令行模式下查找替换:

  • s/xx/yy/g 当前行所有xx替换为yy,g表示整行的所有

  • 1,$ s/xx/yy/g 整个文件的替换

  • %s/xx/yy/g 同上,%表示整个范围

直接替换:

  • R 进入了替换模式,单个字符替换,需手动退出替换模式
  • r 单次单个字符替换
  • cw 修改光标到单词的结尾的内容
  • c$或者C,修改光标后面的行内容

可以配合后文的可视化模式批量替换

操作符汇总

输入:h operator查看

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
    c       c       change
    d       d       delete
    y       y       yank into register (does not change the text)
    ~       ~       swap case (only if 'tildeop' is set)
    g~      g~      swap case
    gu      gu      make lowercase
    gU      gU      make uppercase
    !       !       filter through an external program
    =       =       filter through 'equalprg' or C-indenting if empty
    gq      gq      text formatting
    g?      g?      ROT13 encoding
    >       >       shift right
    <       <       shift left
    zf      zf      define a fold
    g@      g@      call function set with the 'operatorfunc' option

缓冲区

vim编辑文件时开辟的一块内存空间buffer,临时存放vim打开的文件。

buff

vim file1 file2 … 可同时打开多个文件

查看缓冲区列表:

  • :files
  • :buffers
  • :ls

输出四列依次表示:缓冲区序号、指示状态、文件名、光标位置

指示状态:

  • - 只读缓冲区
  • a 活动缓冲区,当前显示在屏幕上的
  • h 隐藏缓冲区
  • % 当前的缓冲区
  • # 交换缓冲区
  • + 已经更改的缓冲区
  • = 只读缓冲区

缓冲区操作:

指令含义
:bp[revious]上一个缓冲区
:bn[ext]下一个缓冲区
:bf[irst]到第一个缓冲区
:bl[ast]到最后一个缓冲区
:buffer 序号或者文件名指定缓冲区
:ball编辑所有缓冲区
:badd ok.sh增加一个缓冲区
:bd[elete] ok.sh删除一个缓冲区
:bufdo %s/pattern/replace/ge | update多buffer查找替换,(即bufdo cmd)
:qall退出所有
:wall
:n,mbd或者%bd删除n到m号或者删除所有

分屏/多窗口

  • 垂直: vim -On [FILE_1] [FILE_2] … O打开水平分屏, n是个数字,代表分屏数量
  • 水平: vim -on [FILE_1] [FILE_2] … o表示垂直分屏

分屏操作(以ctrl+w开始):

指令含义
ctrl+w c/q关闭当前窗口/最后一个窗口 close/quit,(分屏操作一般都是ctrl+w再跟指令)
ctrl+w s上下分屏当前打开的文件,镜像,split
:sp filename上下分割,并打开一个新的文件
ctrl+w v左右镜像(分屏)一个当前打开的文件
:vsp filename左右分割,并打开一个新的文件

分屏调整操作:

指令含义
ctrl+w K/J/L/H上下右左移动
ctrl+w +/-/=增加/减少/所有屏幕高度一致

工作区移动:

ctrl+w hjkl

标签

指令含义
:tabnew新建标签页
:tabfind查找并在新标签页中打开文件
:tabs显示已经打开的标签页列表
:tabclose关闭当前标签页
:tabonly仅保留当前标签页打开
:tabn/p/first/last移动到下/上/第一/最后一个标签页

文本对象

模式:

1
2
3
4
5
# operator操作符或者可视化模式后面跟文本对象
{operator}{a}{object}
{operator}{i}{object}
# 加上数字选择多个对象
{operator}{num}{i}{object}
  • operator:v可视化模式选择对象,或者c/x/d/y等操作符(也可以选择之后跟操作符做对应动作)
  • a: 包含尾部间隔空格
  • i: 只是内容本身,不包含尾部单词间隔空格

词、句子、段落

文本对象说明备注
wword单词
ssentence句子
pparagraph段落

块文本对象

文本对象说明
]/[[] 块
)/(、b()块
>/<<>块
}/{、B{} 块
t标签块: <> </>

示例:

  • viw:选中单词
  • vip:选中段落
  • vi(:选中圆括号中的内容
  • vit:选中标签中的内容
  • daw:删除单词(vawd)
  • dw:删除光标到单词尾
  • yas:复制句子
  • v2i{:选中两层大括号之间的内容

可以理解为批处理,类似于一个函数,一个命令组

  • 普通模式下,q 键便是宏录制/停止快捷键。
  • 宏录制后需要放在寄存器的,所以需要跟上寄存器名字q{register}。比如:qa
  • 录制完毕后,按下 q 键停止
  • 调用时候只需要 @{register} 即可。就像微博一样 @ 一下。
  • 重复调用 n@{register}
指令说明
qa录制宏到寄存器a
qA寄存器a中追加宏
n@a执行n遍寄存器
@@执行一遍上一次操作
:n,m normal @an到m行执行寄存器a中宏
:let @a= ’编辑宏

可视化模式

三种子模式:

  • v:面向字符的可视化模式
  • V:面向行的
  • Ctrl+v:面向块的

操作:

  • gv:重选上次高亮区域
  • o:切换选取边界,即光标位置在前还是后

其他

  • 寄存器
  • 插件

我的.vimrc配置

 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
59
60
61
62
63
64
65
66
67
68
69
70
71
call plug#begin()
Plug 'lifepillar/vim-gruvbox8'
Plug 'morhetz/gruvbox'
call plug#end()

colorscheme elflord "颜色方案

set nu           "设置行号
set hlsearch     "查询高亮
set ruler        "设置标尺
set cursorline   "突出当前行,加一条横线
set cmdheight=2  "设置命令窗口高度
set laststatus=2 "1=启动显示状态行, 2=总是显示状态行.
syntax on        "开启语法高亮

"缩进相关
"set autoindent     "自动缩进
set tabstop=4       "Tab缩进空格数
set softtabstop=-1  "设置softtabstop有一个好处是可以用Backspace键来一次删除4个空格. softtabstop的值为负数,会使用shiftwidth的值,两者保持一致,方便统一缩进.
set shiftwidth=4    "自动缩进时,缩进长度为4
set expandtab       "输入Tab字符时,自动替换成空格

" 设置状态行显示的内容. %F: 显示当前文件的完整路径.
" %r: 如果readonly,会显示[RO]
" %B: 显示光标下字符的编码值,十六进制.
" %l:光标所在的行号. %v:光标所在的虚拟列号.
" %P: 显示当前内容在整个文件中的百分比.
" %H和%M是strftime()函数的参数,获取时间.
set statusline=%F%r\ [HEX=%B][%l,%v,%P]\ %{strftime(\"%H:%M\")}
 
set showcmd "显示还没有输入完整的命令.例如yy命令,输入第一个y会在右下角显示y.
set wildmenu "使用Tab键补全时,在状态栏显示匹配的列表
set showmatch "高亮显示匹配的括号
set hlsearch "高亮显示所有搜索到的内容
set incsearch "光标立刻跳转到搜索到内容

"默认按下Esc后,需要等待1秒才生效,设置Esc超时时间为100ms,尽快生效
set ttimeout
set ttimeoutlen=100

filetype plugin indent on   "检测文件类型,并载入文件类型插件,为特定文件类型载入相关缩进文件
"filetype off 
"filetype indent on "为特定文件类型载入相关缩进文件

"指定tab字符和空格的颜色组为MyTabSpace,不同字符串之间用|隔开,要使用\|转义.

"括号自动补全
"inoremap ' ''<ESC>i
"inoremap " ""<ESC>i
"inoremap ( ()<ESC>i
"inoremap [ []<ESC>i
"inoremap { {<CR>}<ESC>O "最后为大写的O,注意两个左括号之间的空格

set t_Co=256 "支持256色,使得vim配色支持终端
set iskeyword+=_,$,@,%,#,- "带有如下符号的单词不要被换行分割 
set linespace=0 "字符间插入的像素行数目 
set cmdheight=2 "命令行(在状态行下)的高度,默认为1,这里是2 
set backspace=indent,eol,start "使回格键(backspace)正常处理indent, eol, start等 
set ignorecase "在搜索的时候忽略大小写 
set scrolloff=3 "光标移动到buffer的顶部和底部时保持3行距离,窗口滚动最小距离 

"可以折叠 
set foldenable 
set foldmethod=manual 

"备份相关配置,编辑时自动备份旧文件
set backup
set backupext=.bak
set backupdir=/tmp

set lbr

内容整理网络,部分来自自imooc