vim快捷键 https://coolshell.cn/articles/5426.html
:help 显示相关命令的帮助。你也可以就输入 :help 而不跟命令。(陈皓注:退出帮助需要输入:q)
:w 存盘(陈皓注::w 后可以跟文件名)
:q 退出
:q! 退出不保存
:qa! 强行退出所有的正在编辑的文件,就算别的文件有更改。
:e 打开一个文件
:saveas 另存为
:x, ZZ 或 :wq 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
:bn 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
:bp 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
. (小数点) 可以重复上一次的命令
N 重复某个命令N次
100idesu [ESC] 会写下 “desu desu ...... desu desu desu “
. 重复上一个命令—— 100 “desu “.
3. 重复 3 次 “desu” (注意:不是 300,你看,VIM多聪明啊).
hjkl 强例推荐使用其移动光标,但不必需
i 插入在光标前 Insert 模式,按 ESC 回到 Normal 模式.
I 插入在光标所在行最前
a 插入在光标后
A 插入在光标所在行最后
o 插入在当前行后插入一个新行
O 插入在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符
d 剪切
dd 删除当前行,并把删除的行存到剪贴板里
2dd 删除2行
d^ 剪切至行首
d$ 剪切至行尾
dw 剪切一个单词
dG 剪切至档尾
y 复制
yy 拷贝当前行当行于 ddP
Nyy 拷贝N行
y^ 复制当前到行头的内容;
y$ 复制当前到行尾的内容;
yw 复制一个单词 (nyw或者ynw,复制n个单词,n为数字)
yG 复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾)
p 粘贴当前位置之后
3p 粘贴文本3次
P 粘贴当前位置之前
x 删除当前光标所在的一个字符。
X 删除当前光标所在的前一个字符
r 替换当前光标所在的一个字符
R 替换当前光标所在的字符
u 撤销
ctrl+r 恢复
0 数字零,到行头
^ 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
$ 到本行行尾
g_ 到本行最后一个不是blank字符的位置。
NG 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
gg 到第一行。(陈皓注:相当于1G,或 :1)
G 到最后一行。
/pattern 查找 pattern 字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个,N键到上一个)
:noh 取消高亮显示
:s/pattern/boot 替换 当前行匹配到的第一个 pattern 字符串替换成 boot 字符串
:s/pattern/boot/g 替换 当前行匹配到的所有 pattern 字符串替换成 boot 字符串
:%s/pattern/boot 替换 所有行匹配到的第一个 pattern 字符串替换成 boot 字符串
:%s/pattern/boot/g 替换 所有行匹配到的所有 pattern 字符串替换成 boot 字符串
b 到上一个单词的开头
w 到下一个单词的开头。
e 到下一个单词的结尾。
如果你认为单词是由默认方式,那么就用小写的e和w。默认上来说,一个单词由字母,数字和下划线组成(陈皓注:程序变量)
如果你认为单词是由blank字符分隔符,那么你需要使用大写的E和W。(陈皓注:程序语句)
% : 匹配括号移动,包括 (, {, [. (陈皓注:你需要把光标先移到括号上)
* 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
v (可视化的选择)
gU (变大写)
gu (变小写)
ctrl+v 块操作
ctrl+v+N 块操作时向下跳N行
ctrl+v+Ngg 块操作时跳到第N行
ctrl+v+NG 块操作时跳到第N行
ctrl+v+NG+I--+[ESC] 块操作时 跳到第N行 插入字符"--" 按下[ESC]后为选中的每一行插入字符"--"
-------------------------------------------------------------------------------
vim配置文件保存
vim设置下输入:echo $VIM 获得.vimrc文件路径
$VIM 一些配置文件,启动文件
$VIMRUNTIME 说明文件
$HOME home环境变量
.vimrc 修改后不重启生效方法
:source 路经/.vimrc
vim查看非可见字符(Listchars)
:set list 显示
:set nolist 隐藏
:set list! 显示/隐藏 切换
:set listchars 配置使用何种符号来显示不可见字符
:set listchars=tab:>- 键盘制表定位键 显示为 >-
:set listchars=space:. 空格 显示为 .
vim其他设置
:set nu 显示行号
:set tabstop=4 设置 Tab 键宽度为 4 个空格
:set autoindent 设置自动缩进,即每行的缩进同上一节相同
:set showcmd 显示正在输入的命令
:set mouse=a 启用鼠标
:set mouse="" 禁用鼠标
set wrap! 自动折行/不自动折行 切换
vim自定义显示的字符颜色
进行前面的设置之后,空格和 tab 字符已经可见,
但是显示的字符颜色使用了 hi SpecialKey 这一项的颜色,
可以执行 :hi 命令查看 SpecialKey 对应的颜色是什么,
跟 vim 使用的颜色主题有关,不同颜色主题可能有不同的颜色,
例如蓝色、绿色、黑底白色等。
这个显示颜色会跟代码文件本身的颜色高亮混在一起,不方便区分。
假设 tab 字符显示为 >~~~~,字符颜色是蓝色,
如果后面跟着蓝色的代码关键字,就跟代码关键字显示成一个整体,
不方便看到代码关键字。前面把行末空格显示为点号 .,
如果某句注释的行末有空格,容易误以为是注释本身的点号。
为了方便区分于代码文件自身的颜色高亮,
可以使用下面命令来设置可见的空格和 tab 字符显示为灰色,
不那么显眼,方便区分于代码文件自身的颜色高亮:
:hi SpecialKey guifg=darkgrey ctermfg=darkgrey
如果不想显示成灰色,可以修改上面 guifg、ctermfg 的值,设置成个人喜欢的颜色。
这样设置之后,会有一个问题,就是修改了默认 hi SpecialKey 这一项的颜色。
而 vim 会用到这个颜色来显示自身的一些内容,
例如执行 :map 命令,显示映射的快捷键时,
按键字符就显示为 hi SpecialKey 这一项的颜色,改成灰色后,不太显眼。
为了避免直接修改 hi SpecialKey 这一项的颜色,
我们可以自定义一个颜色组,并设置为只对空格和 tab 字符生效,具体如下所示:
:highlight MyTabSpace guifg=darkgrey ctermfg=darkgrey
:match MyTabSpace /\t\| /
这里用 :highlight 命令(这个命令也可以简写为 :hi 命令)
来自定义了一个 MyTabSpace 颜色组,显示为灰色。
然后用 :match 命令设置 MyTabSpace 颜色组对空格和 tab 字符生效。
上面的 \t 就是 tab 字符。不同字符串之间用 | 隔开,
书写的时候要使用 \| 转义。在 | 后面的空白字符就是空格。
-------------------------------------------------------------------------------
vim插件
插件管理器 Vim-plug
https://www.cnblogs.com/zhaodehua/articles/15108744.html
Vim-plug 是一个Vim插件管理器,利用异步并行可以快速地安装、更新和卸载插件。它的安装和配置都非常简单,而且在操作过程中会给出很多易读的反馈信息,是一个自由、开源、速度非常快的、并行地安装或更新插件,极简的 vim 插件管理器。
Vim-plug的获取链接:https://github.com/junegunn/vim-plug
目录准备
检查用户下是否有~/.vim文件夹
mkdir ~/.vim
cd ~/.vim
mkdir plugged plugin syntax colors doc autoload(autoload文件夹也可在安装Vim-plug插件时创建)
~/.vim文件夹下目录介绍
~/.vim/autoload/它是一个非常重要的目录,尽管听起来比实际复杂。简而言之,它里面放置的是当你真正需要的时候才被自动加载运行的文件,而不是在vim启动时就加载。
~/.vim/colors/是用来存放vim配色方案的。
~/.vim/plugin/存放的是每次启动vim都会被运行一次的插件,也就是说只要你想在vim启动时就运行的插件就放在这个目录下。我们可以放从vim-plug官方下载下来的插件.vim
~/.vim/syntax/语法描述脚本。我们放有关文本(比如c语言)语法相关的插件
~/.vim/doc/为插件放置文档的地方。例如:help的时候可以用到。
~/.vim/ftdetect/中的文件同样也会在vim启动时就运行。有些时候可能没有这个目录。ftdetect代表的是“filetype detection(文件类型检测)”。此目录中的文件应该用自动命令(autocommands)来检测和设置文件的类型,除此之外并无其他。也就是说,它们只该有一两行而已。
~/.vim/ftplugin/此目录中的文件有些不同。当vim给缓冲区的filetype设置一个值时,vim将会在~/.vim/ftplugin/ 目录下来查找和filetype相同名字的文件。例如你运行set filetype=derp这条命令后,vim将查找~/.vim/ftplugin/derp.vim此文件,如果存在就运行它。不仅如此,它还会运行ftplugin下相同名字的子目录中的所有文件,如~/.vim/ftplugin/derp/这个文件夹下的文件都会被运行。每次启用时,应该为不同的文件类型设置局部缓冲选项,如果设置为全局缓冲选项的话,将会覆盖所有打开的缓冲区。
~/.vim/indent/这里面的文件和ftplugin中的很像,它们也是根据它们的名字来加载的。它放置了相关文件类型的缩进。例如python应该怎么缩进,java应该怎么缩进等等。其实放在ftplugin中也可以,但单独列出来只是为了方便文件管理和理解。
~/.vim/compiler/和indent很像,它放的是相应文件类型应该如何编译的选项。
~/.vim/after/这里面的文件也会在vim每次启动的时候加载,不过是等待~/.vim/plugin/加载完成之后才加载after里的内容,所以叫做after。
~/.vim/spell/拼写检查脚本。
插件推荐
fcitx.vim
https://www.vim.org/scripts/script.php?script_id=3764
由 lilydjwg 开发的脚本,
下载后直接其复制到 ~/.vim 文件夹下面,重启 vim 就 OK 了。
通过研究代码后发现,这个插件实现的原理比较复杂,
需要通过 fcitx.vim 调用 fcitx.py 和 so/fcitx.vim 两个文件。
其核心代码是去执行函数
au InsertLeave * py3 fcitx2en() 和 au InsertEnter * py3 fcitx2zh()。
从执行情况来看,这个插件非常稳定,堪称表现良好。
但很快发现,在使用 .vimrc 时,
会出现退出中文输入法时会出现卡顿,体验变差。
猜想是某处代码有冲突,几天时间一直没有找到解决方案。
https://zhuanlan.zhihu.com/p/558359369