VIM学习笔记基础篇
注:本文章为本人学习VIM时记录的笔记,且经过整理,适合临时查询,不适合做完整的学习。
相关资料:
初步接触
帮助手册
对某一个命令进行查询:
:help :qa
- 简写
:h :qa
- 在非桌面模式下:
F1
进入
有两种帮助手册:
- 用户帮助手册,像是一本使用指南
- 引用帮助手册,更适合查询,讲的比较详细
理解模式
VIM 一共有6种基本模式:
- 正常模式(Normal mode)
- 也叫默认模式。
- 进入
vim
时默认的模式所有输入的键都直接对应着命令 - 也被叫做命令模式.
- 插入模式(Insert mode)
- 任何键盘录入都会插入到当前文档中
- 可视模式(Visual mode)
- 很像正常模式
- 但是移动命令会改变选中的一块高亮区域
- 执行的命令会对选定范围进行
- 选择模式(Select mode)
- 可以用鼠标或光标键高亮选择文本
- 任何输入都会替换选择的高亮文本
- 并进入插入模式
- 命令行模式(Command-Line mode)
- 可以窗口下方执行一条命令
- 一般是通过 : 执行单行命令
- 通过 / 和 ? 进行搜索
- Ex mode(多行命令执行模式)
Ex
指的是Execute
- 在
Normal
正常模式下使用 gQ 进入 - 使用
:visual
退出
移动
- 使用
h
,j
,k
,l
进行移动 - 通过配置
:set mouse=a
可以用鼠标移动光标、使用滚轮翻页、使用鼠标点击链接,具体可以:h mouse
查看更多帮助 - 另外如果只是用键盘,可以用
CTRL + ]
跳入链接,使用CTRL + o
跳出链接 e
end of wordge
向前end of word^
行首第一个非空字符,0
行首第一个字符
$
行尾最后一个字符,g_
本行最后一个非空字符+
向下到行首非空字符,相当于j^-
向上,同上gg
,G
跳到第一行和跳到最后一行2G
跳到第二行,命令模式::30
到30行- ``跳到上一次,只能是上一次,不能是上上次
CTRL+O
CTRL+I
跳转到上一次,下一次10|
跳转到10列20%
跳转到20%
标记
- 做标记a:
ma
- 看标记:
:mark
'
是上次跳转操作光标所在的位置"
是上次退出当前文件的位置[
是上次编辑(删除修改等)的开始位置]
是上次编辑(删除修改等)的结束位置.
是上次编辑(删除修改等)的最后的操作位置- 删除标记:
delma
- \
插入
a
append 在光标前插入i
insert 在光标后插入I
在本行的最前面插入A
在本行的最后面插入o
在下一行插入O
在上一行插入
插入模式下按CTRL + o
进入插入普通模式,可以执行一次命令
查看信息
查看文档当前的信息
CTRL + G
:f
:file
这里的位置百分比是光标所在位置在整体文件种的相对比例
配置参数
行号
- set nu
- set nonu
- set rnu
- set nornu
按键映射
map <Left> <Nop>
修改按键映射
Options
- set ru[ler]
- set noru[ler]
打开开关文件:options
- set number? 查看状态
- 复原 set number&
- set cursorline
- set cursorcolumn
其他实用开关
set number
显示行号set relativenumber
显示相对行号set cursorline
光标所在的当前行高亮set cursorcolumn
光标所在的当前列高亮set nocompatible
使用vim
模式,不与Vi
兼容syntax on
打开语法高亮set showmode
在底部显示,当前所处模式set showcmd
命令模式下,在底部显示键入指令set mouse-=a
纯键盘操作set encoding=utf-8
使用 utf-8 编码set autoread
硬盘文件变化后,自动读取- 把上述这些存储到
~/.vimrc
之后,以后这些配置就会自动起作用了- 也可以去
github
搜索.vimrc
找到关于配置的更多信息
文件类型
:filetype on
检测文件扩展名
:filetype off
关闭检测文件扩展名
:set filetype=c
强制设置文件类型
为某种文件单独设置配置
要打开文件类型缩进的开关
:filetype indent on
然后在/usr/share/vim/vim81/indent/ 目录下进行配置:
- c.vim
- java.vim
- 等等
横滚幅度
前提:
:set nowrap
不换行
如果一行特别长,一致往左,当到达边界后,会继续向左,但光标会移动到屏幕中间。
- 可以通过设置
sidescroll
来控制横滚的幅度 - 可以通过设置
sidescrolloff
来控制距离边缘还有多少时才滚动,默认是0
如果设置了自动换行,那么
h
和l
会上下显示的一行移动,而不是实际的一行,此时可以用gj
,gk
来这么操作
whichwrap
属性:默认情况下,在 VIM 中当光标移到一行最左边的时候,我们继续按左键,光标不能回到上一行的最右边。同样地,光标到了一行最右边的时候,我们不能通过继续按右跳到下一行的最左边。但是,通过设置 whichwrap 我们可以对一部分按键开启这项功能。如果想对某一个或几个按键开启到头后自动折向下一行的功能,可以把需要开启的键的代号写到 whichwrap 的参数列表中,各个键之间使用逗号分隔。
瞬移秘籍
垂直翻页
:set scrolloff=2
设置上下翻动的留边(就是还剩2行就会发生滚动)H
到当前屏幕显示的最上行High
M
到当前屏幕显示的正中 Middle
L
到当前屏幕显示的最下 Low- 右下角显示的百分比是和左上角的行号关联的
- 翻页:
CTRL + f
向前翻页 forward
CTRL + b
向后翻页 backward
可以在前面加数字表示翻的页数 CTRL + e
屏幕向上移动一行,光标位置不变
CTRL + y
屏幕向下移动一行,光标位置不变CTRL + d
向下走,翻半屏 down
CTRL + u
向上走,翻半屏 up
光标在屏幕的相对位置不变,屏幕整体向上或向下移动
设置:set scroll=15
来明确翻的行数zt
光标保持在当前位置,移动屏幕,让光标出现在顶部 top
zz
光标保持在当前位置,移动屏幕,让光标出现在中间
zb
光标保持在当前位置,移动屏幕,让光标出现在底部 bottom
受scrolloff
的影响
屏位行号
如何让屏幕不动,只移动光标?
2H
移动到距离屏幕最顶端第2行的位置
3L
会移动到距离屏幕最低3行的位置
文字区块
{
让光标向后移动一段
}
让光标向前移动一段
段落是用回车符分割的一段一段的文字(
让光标向后移动一句
)
让光标向前移动一句[[
本块的第一行
]]
本块的最后一行
函数跳转
%
跳转到括号对的前半部分,如果已经在,则跳转到后半部分[{
跳转到上一个(
]}
跳转到下一个)
[*
,[/
上一个注释的头
]*
,]/
下一个注释的头]m
下一个函数开头
]M
下一个函数结尾
[m
上一个函数开头
[M
上一个函数结尾gd
找到本地定义 goto global decclaration- 插件
matchit
可以让%
支持标签的跳转
查找文本
全文查找:
/
向后查找,?
向前查找
配置:
:set hls[earch]
,set nohls[search]
设置高亮开关
noh[lsearch]
命令:hi Search ctermbg=erd ctermfg=black
设置高亮颜色:set w[rap]s[can]
,:set nows
当遍历到结尾处后是否可以从头开始
遍历查找:
n
下一个匹配项
N
上一个匹配项
行内搜索:
f
find 向前查找,F
反向t
till 向前查找,落在目标前,T
反向;
进行同向重复,,
反向重复
配置:
- 如果
;
被映射过,要修改映射:map ; ;
查找进阶:
:set incsearch
:set noincsearch
实时匹配搜索输入:set i[gnore]c[ase]
:set noic
忽略大小写
:set smartcase
智慧大小写 优先完全匹配,否则忽略大小写
/xxx\C
\C
表示区分大小写,\c
不区分大小写*
当在一个单词上面时,向前查找这个单词
#
当在一个单词上面时,向后查找这个单词
g*
当在一个单词上面时,查有这个单词的单词/as\>
查找以as结尾的单词
/\<as
查找以as开头的单词- 可以在查找的时候使用正则表达式,如:
/^T.m$
/
之后,配合上下键看以看到查找历史
文本编辑
插入字符
i
插入- 插入模式下:
CTRL + v
输入ascii
码
CTRL + k
进入二合字符输入状态,详情:h dig(raphs)
Ctrl + r
寄存器计算,如输入=3+3
,得到6 J
将两行连在一起
删除字符
dd
删除一行x
删除一个字符,Ctrl + x
删除前一个字符
:reg
查看寄存器
CTRL + W
d$
=D
从光标删到行尾
常用操作
退出InsertMode
CTRL + C
缩进
-
<<向前
-
>>向后
-
==当前行自动缩进
-
gg=G全部缩进
-
set list使得tab被显示为
^I
,行尾会显示$
-
设置特殊字符:
:set listchars=eol:$,tab:>-,space:_
-
:set listchars=eol:$,tab:>-,space:_
设置高亮
- shiftwidth值是整个缩进的基础
:set shiftwidth=4
shiftwidth
是一个基础的值,对应- 按下
>>
缩进的宽度- 按下 tab 缩进的宽度
- 退格或者删除
\t
时缩进的宽度- 一般tabstop,softtabstop都与他相同
- 一般都是 4
- 如果
shiftwidth
是 0 的话- 就按照
tabstop
来tabstop:读取文件时,读到\t时解释为几个字符
-
:set expandtab
把输入的tab变成空格 -
retab!
把已经存在的tab强制转换成空格 -
:set autoindent
添加与上一行一致的缩进,:set ai
-
:set smartindent
在上述的基础上根据括号调整本行缩进,需要保证:se nopaste
-
:set cindent
根据类似c、java的代码动态调节缩进
整体设定
:set noexpandtab
:set shiftwidth=4
:set tabstop =4
:set softtabstop=4
:set autoindent
- 简写为
:set noet sw=4 ts=4 sts=4 ai
- 这都个人喜好
- 没有绝对规定
评论区