常用
课程链接
Vim
中的指令可以灵活组合使用
:help
查找文档
切换为后台Ctrl + z;切换为前台fg
Ctrl + D打开候选列表
Normal模式
进入Vim
,默认Normal
模式或使用Esc进入Normal
模式
移动
单词间移动
移动到下一个word
/WORD
开头 w
/ W
(移动到下一个word
/WORD
结尾 e
/ E
)
移动到上一个word
/WORD
开头 b
/ B
word
是指以非空白符分割的单词,WORD
是指以空白符分割的单词。
行间搜索移动
使用 f{char}
可以移动到{char}
字符上,t{char}
移动到{char}
字符的前一位字符
多个{char}
间的切换用;
/ ,
表示下一个 / 上一个f
搜索到光标与行尾间的字符,F
搜索到光标与行首间的字符。
行间快速移动0
移动到行首第一个字符,使用0w
起到和^
相同的作用(^
移动到行首第一个非空白字符)$
移动到行尾(g_
移动到行尾非空白字符)
页面移动gg
/ G
移动到文件的开头 / 结尾,ctrl + o
快速返回
移动到屏幕的开头H
(head),中间M
(middle),结尾L
(lower)<C-b>
/ <C-f>
上 / 下翻页<C-u>
/ <C-d>
上 / 下翻半页zz
调整当前行到屏幕中间zt
将光标所在行调整到屏幕上方:n
跳转到第n
行ma
标记到 a
上,使用'a
回到标记 ''
跳转到上次浏览的位置'
(单引号)是跳转到标记的字符上,` (键盘左上 ~ 符号)是跳转到该行上
屏幕滚动zl
向右滚动一个字节的屏幕zh
向左滚动一个字节的屏幕
删除
x
或 d
删除选中部分,x
可以用在一个字符上直接删除,d
属于删除指令,要删除一个字符,需要dl
dw
删除光标到单词的结尾,diw
删除光标所在的单词,dd
删除光标所在行,D
删除所在行光标之后的所有词dt{char}
删除光标到{char}
的所有字符d0
删除到行首,d$
删除到行尾2dd
删除两行,4x
删除四个字符。数字+命令
表示多次重复。ggdG
清空屏幕.
模仿上一次删除操作
修改
r
(replace) 替换一个字符,保持Normal
模式; R
替换多个字符,保持Normal
模式s
(subtitute) 删除当前字符,并进入Insert
模式;S
删除当前行,并进入Insert
模式c
(change)cw
删除单词,并进入Insert
模式;C
删除光标到行尾,并进入Insert
模式;ci(
修改()
中的内容,()
也可以是{}
[]
<>
,但是对于c++中的流操作符<<
就不能使用ci<
来修改其内容,因为是两个<
相连,可以使用c%
进行修改,但是光标要置于<
后。
查找
/xxx
匹配到xxx
的字符上,然后通过使用n
/ N
跳转到下一个 / 上一个
复制粘贴
y
(yank)复制 yiw
复制一个单词,yy
复制一行,y0
复制光标到行首d
(delete)剪切p
(put)粘贴,p
粘贴到光标之后,P
粘贴到光标之前
vim
在复制、剪切过程中的文本内容是存在寄存器中,而不是系统剪切板。xp
:用x
删除一个字符,将字符放到无名寄存器中,再使用p
粘贴,实现字符对调。
对于寄存器的使用,通过:{register}
可以指定寄存器,有多个寄存器,如a
到z
都可以设置为寄存器,可以作为剪贴板来使用。如"ayiw
表示复制一个单词到寄存器a
中,"bdd
表示删除当前行到寄存器b
中。
使用:reg a
显示寄存器a
中保存的内容
使用"bp
表示粘贴寄存器b
中的内容""
表示无名寄存器,默认就是用的无名寄存器,因此可以省略不写"0
表示复制专用寄存器,默认复制到无名寄存器时,也会复制到专用寄存器"+
表示系统剪贴板,用于和vim
外进行交互用的寄存器
清理寄存器的内容 :let @"=''
,让无名寄存器的内容赋为''
空字符
当在客户端进行复制后,在服务端进行粘贴时,无法使用寄存器进行交互,因此可以使用:set clipboard=unnamed
设置服务器中的vim
,再直接使用p
来进行粘贴
颠倒两行:exe "normal! ddpk"
-
:exe
:这是一个Ex
命令,用于执行后面的字符串作为Vim
命令。 -
"normal! ddpk"
:这是要执行的字符串。在这个命令中,"normal"
是Vim
将后面的字符串作为普通模式下的按键操作来执行。!
表示强制执行命令,忽略任何可能的映射。 -
dd
:删除当前行,并将其保存到剪贴板中。 -
pk
:按下p
键,将剪贴板中的内容(之前删除的行)粘贴到光标当前位置的上一行。
撤销
u
撤销操作,U
撤销某一行最近所有修改,<C-r>
撤销u
Insert模式
i
(insert)光标之前插入,I
行首插入a
(append)光标之后插入,A
行尾插入o
(open a line below) 在下一行插入,O
在上一行插入
进入该模式后,<C-h>
删除上一个字符,<C-w>
删除上一个单词,<C-u>
删除光标前当前行所有字符(同理于终端)
可以使用 <C-c>
或 <C-[>
,从 Insert
模式切换到 Normal
模式
可以使用 gi
,从 Normal
模式切换到 Insert
模式中最后编辑的位置
复制粘贴
正常文本的复制粘贴<C-c>
<C-v>
<C-r>{register}
对对应寄存器中的内容进行粘贴
CMD模式
通过 :
进入命令行模式
:w
(write)写入:wq
(write quit)写入并退出:q
退出编辑器,如果存在未保存的修改,Vim
会提示保存或放弃修改。如果没有做任何修改或已保存修改,Vim
将立即退出。:q!
也用于退出编辑器,但是它会强制退出,丢弃所有未保存的修改
因此,如果你有未保存的修改,应该首先使用:q
命令尝试退出编辑器并保存修改。只有在确定不再需要这些修改时,才应使用:q!
命令强制退出。
:vs
(vertical split)竖直分屏:sp
(split)水平分屏:set nu
(set number)设置行号
替换
支持正则表达式
语法::[range]s[ubtitute]/{pattern}/{string}/[flags]
[range]
表示范围,如10,20
表示10到20行,%
表示全部
{pattern}
表示需要替换的文本
{string}
表示替换后的文本
[flags]
g
(global) 表示全局范围执行c
(confirm) 表示需要确认是否修改n
(number) 表示匹配到的次数,而不进行替换
:% s/a/b/g
把所有的a
替换成b
:1,6 s/a/b/g
把1到6行的a
替换成b
:1,6 s/a//n
1到6行中查找有多少个a
。但可能会对a
替换成空字符,可修改为:1,6 s/a/&/gn
%
可以有配对的功能
使用正则表达式:% s/\<a\>/b/g
把所有的单词a
替换成b
,而不替换含有a
字符的单词
若要搜索以 example
开头的单词,可以输入 /\<example
若要搜索以 example
结尾的单词,可以输入 /example\>
Visual模式
进行可视化选择Normal
模式输入v
,进入visual
选择。使用V
选择整行,使用<C-v>
进行块状选择。
选中使用U
转换成大写字母,u
转换成小写字母>/<
右 / 左移S"
选中的文本加上双引号
多文件间的转换
Buffer
Buffer
指打开的一个文件的内存缓冲区
修改时针对Buffer
的内容修改,:w
再将修改内容写入文件。
每个文件对应一个Buffer
,使用:ls
会列举当前缓冲区,再使用:b n
跳转到第n
个缓冲区。:bpre
:bnext
:bfirst
:blast
分别跳到对应的缓冲区中,或者用:b buffer_name
加上Tab
补全来跳转。
通过:ls
来获得缓冲区中对应文件的信息、编号,可以通过:b1
跳到编号为1所对应文件的Buffer
中去。
也可以用:e buffer_name
打开对应的文件。
Window
Window
是Buffer
可视化的分割区域。<C-w>v
垂直分割,同:vs
<C-w>s
水平分割,同:sp
<C-w>w
窗口间循环切换<C-w>h
切换到左侧窗口,<C-w>H
将窗口移动左侧 <C-w>j
切换到下侧窗口,<C-w>J
将窗口移动下侧<C-w>k
切换到上侧窗口,<C-w>K
将窗口移动上侧<C-w>l
切换到右侧窗口,<C-w>L
将窗口移动右侧
Tab
Tab
可以把Window
组织为一个工作区
文本对象
可以快速操作一个单词、一个句子和一个段落等。
语法:[number]<command>[text object]
[number]
表示次数<command>
表示命令,如d
c
y
[text object]
表示要操作的文本对象,如w
单词,s
句子,p
段落
如iw
(inner word) viw
表示选择当前单词,vi"
表示选择"
中的内容aw
(around word) vaw
表示选择当前单词以及单词后的空格
宏
一系列命令的集合:可以使用宏录制一系列操作,再用于回放这些操作,用于批量的编辑。
在Normal
模式下,使用q
来开启录制,再使用q
来结束录制。可以使用q{register}
,来指定对应的寄存器来存放指令。使用@{register}
来回放。
如,有多行网址,要给每一行的网址加上双引号。
https://www.example1111.com
https://www.example22.com
http://www.example333.com
http://www.example4444.com
https://www.example55555.com
http://www.example666666.com
https://www.example7777777.com
http://www.example88.com
https://www.example99999.com
http://www.example1000000.com
qa
开启录制宏到a
寄存器中
光标置于第一行,I" <C-[> A" <C-[> q
,其中I
光标置于行首,插入"
,<C-[>
退出Insert
模式,A
插入到行尾,插入"
,退出Insert
模式,q
结束录制。 完成了一个宏。
可以使用j@a
,让下一行也通过宏完成指令。
还可以使用进入visual
模式,VG
选择其余所有行,使用:
进入命令行模式,vim
会显示:'<,'>
,使用normal
模式下的指令,输入normal @a
。命令行整体为:'<,'>normal @a
,即可完成操作。
整体修改只需:1
qa
I" <C-[> A" <C-[>
q
:2
VG
:normal @a
"https://www.example1111.com"
"https://www.example22.com"
"http://www.example333.com"
"http://www.example4444.com"
"https://www.example55555.com"
"http://www.example666666.com"
"https://www.example7777777.com"
"http://www.example88.com"
"https://www.example99999.com"
"http://www.example1000000.com"
其实可以不使用宏也来完成该需求,VG
先全选,输入:normal I"
,给所有行首加入"
,进入命令行模式:
,<C-p>
输出上一步操作,将I"
改为A"
即可。
将宏的批量修改改成统一修改,由于录制宏中需要两次退出Insert
模式,因此需要两次进入normal
模式。
补全
常见补全<C-n>
和 <C-p>
补全单词,在待补全选项中,可以通过使用操作选<C-n>
下一个和 <C-p>
上一个,而不使用方向键来选择。<C-x>
和 <C-f>
补全文件名<C-x>
和 <C-o>
补全代码,需要开启文件类型检查,安装插件
操作键位图
配置
对:set number
等配置的持久化,而不是每次打开一个文件都要重新配置。通过对vimrc
的设置,完成此需求。
建立一个~/.vimrc
配置文件,通过其编写对vim
的设置。
- 常用设置:
:set nu
设置行号,colorscheme hybrid
设置主题 - 常用的
vim
映射:noremap <leader>w :w<cr>
保存文件 - 自定义的
vimscript
函数和插件的配置
"
表示注释
映射
vim
的映射比较复杂,因为有多种模式。在~/.vimrc
中,通过使用leader
键来进行组合,常用的leader
键是使用,
或者<space>
空格 let mapleader = ','
。
命令 | 模式 | 描述 |
---|---|---|
map |
所有模式 | 创建非递归映射 |
noremap |
所有模式 | 创建递归映射 |
com! |
命令行模式 | 定义自定义命令 |
imap |
插入模式 | 创建插入模式下的非递归映射 |
inoremap |
插入模式 | 创建插入模式下的递归映射 |
nmap |
正常模式 | 创建正常模式下的非递归映射 |
nnoremap |
正常模式 | 创建正常模式下的递归映射 |
vmap |
可视模式 | 创建可视模式下的非递归映射 |
vnoremap |
可视模式 | 创建可视模式下的递归映射 |
xmap |
选择模式 | 创建选择模式下的非递归映射 |
xnoremap |
选择模式 | 创建选择模式下的递归映射 |
有 inoremap <leader>w <Esc>:w<cr>
-
inoremap
: (i
insert,nore
no recursive,map
map) 插入模式非递归映射 -
<leader>w
等价使用,w
-
<Esc>:w<cr>
等价表示为在Insert
模式,先使用<Esc>
,进入Normal
模式,再进入命令行保存文件:w
,最后再使用回车<cr>
使用,w
映射为在Insert
模式保存文件。
如何使得自定义的vimrc
配置文件生效,类似与.bashrc
一样,通过输入:source ~/.vimrc
来使其生效或者退出,重新进入。
有noremap <C-h> <C-w>h
,通过<C-h>
来实现移动到左侧窗口。
有一种情况,如下
:nmap - dd
:nmap \ -
最后,会将\
映射为dd
。类似于递归的形式。因此,使用递归映射,行为有不确定性。比如安装的插件恰巧映射了不确定的行为。建议使用非递归映射
通过把vimrc
配置放到git
版本备库管理可以同步到其他电脑或服务器上。
插件
推荐使用vim-plug
插件管理器,在.vimrc
中使用如下命令
call plug#begin('~/.vim/plugged')
//...
call plug#end()
有需求就有供给,如何找到插件:
- vimawesome
- 他人开源配置文件:SpaceVim,PegasusWang
//...
的位置添加想要的插件内容,完成vimrc
的修改后,执行:PlugInstall
安装插件即可。
语法 | 网址 | 描述 | 指令 |
---|---|---|---|
Plug 'mhinz/vim-startify' |
https://github.com/mhinz/vim-startify | 开屏插件,可以显示最近打开的文件 | |
Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes'
|
https://github.com/vim-airline/vim-airline | 状态栏美化 | |
Plug 'yggdroot/indentline' |
https://github.com/Yggdroot/indentLine | 增加代码的缩进线条 | |
Plug 'w0ng/vim-hybrid' |
https://github.com/w0ng/vim-hybrid | vim配色 | |
Plug 'preservim/nerdtree' |
https://github.com/preservim/nerdtree | 文件目录树 | |
Plug 'kien/ctrlp.vim' |
https://github.com/kien/ctrlp.vim | 快速查找并打开文件 |
<C-p> 打开搜索框 |
Plug 'easymotion/vim-easymotion' |
https://github.com/easymotion/vim-easymotion | 快速查找 |
ss 查找指定的字符查找 name ,通过ssna ,将显示高亮部分,通过该部分上的字母将选择是哪一个字符 |
Plug 'tpope/vim-surround' |
https://github.com/tpope/vim-surround | 成对编辑"" () 等 |
name 上加" : ysiw" you add a surrounding删除 "name" 的" : ds" delete a surrounding"name" 将" 换成( :cs"( 或cs") change a surrounding区别是前者 () 中间有空格( name ) ,后者() 中间没有空格(name)
|
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim'
|
https://github.com/junegunn/fzf.vim | 模糊搜索 |
:Ag [pattern] 模糊搜索字符串:Files [pattern] 模糊搜索目录使用 <C-k>/<C-j> 在列表中上 / 下移 |
Plug 'brooth/far.vim' |
https://github.com/brooth/far.vim | 搜索、替换插件 |
:Far a b /path/to/files /path/to/files 中的a 全部替换成b :Fardo 开始替换 |
Plug 'preservim/tagbar' |
https://github.com/preservim/tagbar | 代码大纲 |
:TagbarToggle ,打开代码大纲 |
Plug 'lfv89/vim-interestingwords' |
https://github.com/lfv89/vim-interestingwords | 高亮代码 | 选中想要高亮的单词<leader>k 高亮n/N 高亮间切换<leader>K 取消高亮 |
见github | https://github.com/Shougo/deoplete.nvim | 代码异步补全 | |
Plug 'sbdchd/neoformat' |
https://github.com/sbdchd/neoformat | 代码格式化 |
:Neoformat xxx xxx 为对应语言的格式化工具名称详见github |
Plug 'dense-analysis/ale' |
https://github.com/dense-analysis/ale | 静态检查 | |
Plug 'tpope/vim-commentary' |
https://github.com/tpope/vim-commentary | 注释 |
:gcc 注释和取消注释 |
Plug 'tpope/vim-fugitive' |
https://github.com/tpope/vim-fugitive | 在Vim 中使用Git 命令 |
见github |
脚本
vim
对应的脚本vimscript
推荐书目笨方法学Vimscript文章来源:https://www.toymoban.com/news/detail-553554.html
CLion插件
AceJump
默认键位为;
,与ideaVim中的leader键位冲突,改为,
。文章来源地址https://www.toymoban.com/news/detail-553554.html
- Ctrl + , 激活AceJump,输入任何字符,会显示出提示
- Ctrl + , 连续点击两次,进入Declaration模式,相当于IDE的Navigate to。
- Ctrl + , 连续点击三次,进入Target模式,会选取整个单词,该模式也可以通过Ctrl + Alt +,来激活
- Ctrl + Shift + , 来导航到任意行,或者任意行首、任意行尾位置
到了这里,关于Vim语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!