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