CLion和SoureLight都蛮贵的,所以直接在vim写代码了,用了一些插件
下面的快捷键都是我设置的,可以在~/.vimrc修改
操作模式
normal模式
insert模式(按i
进入)
visual模式(按v
进入),可视化模式,主要是为了方便选取文本
leader模式(默认\
,可自定义)
指令模式(输入:
进入)
vim粘贴会自动缩进,需要:set paste
开启paste模式禁止缩进,:set nopaste
取消
常见基本操作
normal模式下:u(undo回退),可以按多个u一直回退
向前跳单词:w
先后跳单词:b
重做::redo
、ctrl+r
(undo多了的时候要redo)
基本命令:https://www.huaweicloud.com/articles/12650466.html
查找与替换:
:/<str>
,n
:下一个,N
上一个
:%s/word1/word2/g
:在全局(%
),将word1替换(g
)成word2
:5,12s/word1/word2/g
:在5~12行(5,12
),将word1替换(g
)成word2
:.,+2s/word1/word2/g
在当前行,与接下来两行+2(.,+2
),将word1替换(g
)成word2
格式为:
:{作用范围}s/{目标}/{替换}/{替换标志}
更多替换见:https://www.jianshu.com/p/b3b2f04c1897
复制nyy/yy、剪切、粘贴p:https://www.cnblogs.com/wojiaowoen/p/6110783.html
跳转操作:
指令 | description |
---|---|
:n 、ngg 、nG |
跳转到第n行 |
ctrl+o |
跳转到光标上一个位置 |
G |
跳到文本的最后一行 |
gg |
跳到第一行的第一个字符 |
0 |
跳转到当前行的第一个字符 |
$ |
跳转到当前行的最后一个字符 |
tab操作:
指令 | 快捷键 | description |
---|---|---|
:tabp | <leader>1 |
上一个tab |
:tabn | <leader>2 |
下一个tab |
:tabnew | <leader>] |
新建tab |
:x | 关闭tab |
以后别q!
了,很不安全,直接q
,只有决定放弃修改才q!
分屏操作:
分屏操作的格式都是ctrl+w <command>
指令 | description |
---|---|
vim -On\on |
启动vim的时候,将屏幕分为n个部分,O垂直,o水平 |
:vsp/sp filename |
垂直(vsp)/水平(sp)分屏打开一个新文件(vsp是vsplit的缩写) |
ctrl+w v/s |
将当前打开的文件进行垂直(v)/水平(s)分割 |
ctrl+w w |
顺时针在分屏间切换 |
ctrl+w h/j/k/l |
分别向左、下、上、右4个方向切换 |
ctrl+w c |
关闭当前操作的分屏 |
ctrl+w +/- |
增加/减少当前屏幕的高度 |
ctrl+w = |
设置所有的分屏幕都有相同的高度 |
https://vimjc.com/vim-split-window.html
只读文件时候强制保存::w !sudo tee %
按键映射
在vimrc中通过map进行快捷键映射
map <leader>快捷键 :原指令
https://ixyzero.com/blog/archives/2305.html
nmap(normal模式映射)、imap(insert模式映射)、vmap(visual模式映射)
noremap:非递归映射(nnoremap、inoremap、vnoremap)
不带n、i、v前缀则代表通用
快捷键用<>
包起来,比如<C-A>
代表ctrl+a
我设置的常用映射【目前都用不了!】:
指令 | decip. |
---|---|
ctrl+a | 全文复制(normal模式;先要set clipboard=unnamed ) |
crtl+c | 复制(normal) |
crtl+v | 粘贴(normal) |
ctrl+s | 保存文件(normal模式、insert模式) |
ctrl+a | 跳转行首(insert) |
ctrl+e | 跳转行尾(insert) |
leader模式
只用快捷键很麻烦,所以产生了leader模式,可以自己定义快捷指令
vim默认的leader是\
,输入\
即进入leader模式,就可以使用leader模式的快捷键了
可以通过let mapleader=","
修改,比如这里修改成了,
注意:进入leader模式是在普通模式下进入!而不是在:
命令模式下!!
leader模式映射只需要在map后加一个<leader>
,比如:noremap <leader>file :<C-U><C-R>=printf("Leaderf file %s", "")<CR><CR>
plug管理
以下为plug
LeaderF(search)
https://github.com/Yggdroot/LeaderF
指令 | 快捷键 | description |
---|---|---|
LeaderfFile |
<leader>file |
搜索当前目录下的文件 |
LeaderfFunction |
<leader>ff |
搜索当前文件的函数 |
LeaderfBuffer |
<leader>b |
搜索当前的Buffer |
LeaderfMru |
<leader>m |
搜索最近使用过的文件 |
LeaderfLine |
<leader>l |
搜索当前文件中有的某个单词 |
ctrl+j/k |
在候选框打开模式下,上下移动选项 |
fzf(search)
https://github.com/junegunn/fzf
universal ctags
这个先不用管,装就完了,后面YCL等很多插件都依赖ctags
用apt装,apt install universal ctags
ctags:自动跳转功能
ctags(universal ctags):ctags 的作用是扫描工程中的代码,为代码中定义的函数、变量生成一份 tags 数据库文件,然后我们用 vim 浏览代码的的时候,当光标移动到某个函数或者变量上,只要按下 Ctrl + ] 组合按键,就会自动跳转到这个函数或者变量定义地方。
NERDTree
目录树,类似于Finder
https://github.com/preservim/nerdtree
进入当前目录的树形界面,通过小键盘”上下”键,能移动选中的目录或文件。
目录前面有”+”号,按Enter会展开目录,文件前面是”-“号,按Enter会在右侧窗口展现该文件的内容,并光标的焦点focus右侧。
光标focus左侧树形窗口,按?
弹出NERDTree的帮助,再次按?
关闭帮助显示。输入:q
回车,关闭光标所在窗口。
:NERDTreeToggle
快捷键 <C+n>
当focus在目录树的时候,可以按下面按键可以执行命令
?
: 快速帮助文档
o
: 打开一个目录或者打开文件,创建的是 buffer,也可以用来打开书签
go
: 打开一个文件,但是光标仍然留在 NERDTree,创建的是 buffer
t
: 打开一个文件,创建的是Tab(而不是水平切分),对书签同样生效
T
: 打开一个文件,但是光标仍然留在 NERDTree,创建的是 Tab,对书签同样生效
i
: 水平分割创建文件的窗口,创建的是 buffer
gi
: 水平分割创建文件的窗口,但是光标仍然留在 NERDTree
s
: 垂直分割创建文件的窗口,创建的是 buffer
gs
: 和 gi,go 类似
x
: 收起当前打开的目录
X
: 收起所有打开的目录
e
: 以文件管理的方式打开选中的目录
D
: 删除书签
我的自定义快捷键:
指令 | 快捷键 | description |
---|---|---|
NERDTreeFocus |
<leader>t |
聚焦目录树 |
NERDTreeToggle |
ctrl+t |
打开/关闭目录树 |
NERDTreeFind |
ctrl+f |
打开目录树并定位到当前文件 |
vim-autoFormat
格式化代码
https://github.com/vim-autoformat/vim-autoformat
https://blog.csdn.net/Demorngel/article/details/69053613
语言格式化工具装了clang-format、astyle
:Autoformat 快捷键:F5
auto-pairs
在输入/删除左括号时,能自动补上/删除右括号
jiangmiao/auto-pairs
vim-airline
状态栏
https://github.com/vim-airline/vim-airline
YCM
YCM需要前置安装一些组件,然后再在.vimrc里配置
vim_plug安装YCM的方法:https://blog.csdn.net/wycgi/article/details/88372516
sudo apt install build-essential cmake python3-dev
cd .vim/plugged/YouCompleteMe/
python3 ./install.py —all
安装好后,要将.ycm_extra_conf.py
放到vimrc的let g:ycm_global_ycm_extra_conf指定的位置
YCM官方文档,里面有一些常用命令,以后用到可以自己设快捷键:https://github.com/ycm-core/YouCompleteMe#linux-64-bit
我定义的快捷键:
快捷键 | description |
---|---|
ctrl+d | 跳转到定义/声明处 |
ctrl+i | 跳转到实现处 |
ctrl+o | 跳转到光标上一个位置(非YCM功能,但和跳转定义结合非常常用!) |
ctrl+t | 显示类型 |
<leader>doc |
显示doc |
关于ycm颜色配置的可选项:https://siatwe.wordpress.com/2018/03/23/vim-ctermfg-and-ctermbg-color-values/