当前位置: 首页 > 科技观察

简单的Vim很好

时间:2023-03-21 17:14:59 科技观察

这就是我如何从35个Vim插件减少到只有6个。当你使用--clean选项启动Vim时,它会以“普通”模式显示Vim。没有插件,没有配置,一切回到开始。这些年来,我收集了一堆配置语句,其中一些可以追溯到MS-DOS或Windows3.1时代。这是我的计划:从头开始,只使用Fedora35中可用的插件,并找到一个好的配置起点。我可以熬过一周的编码吗?我会找出来的!规则是这样的:尽可能少的配置语句,并且只使用来自Fedora35+的插件。顺便说一句,如果您不是Fedora用户,请继续阅读。您可以随时从操作系统包管理器或使用Vim插件管理器手动安装这些插件。在开始之前,有一个大问题需要解决:Vim还是Neovim(Vim的一个分支)。好吧,这取决于你。这篇文章中的所有内容都适用于两者。然而,我只用Vim测试过它。当您登录到只有vi可用的服务器时,所有这些技能都会派上用场。它可以是一个旧的UNIX系统,一个安装了最少软件以提高安全性的Linux服务器,一个容器中的交互式shell,或者一个空间非常宝贵的嵌入式系统。事不宜迟,以下是我为使用Vim编码而提炼出的绝对最低限度的内容:vim-fugitive\vim-ale\ctags不用担心--allowerasing选项。在确认之前,只需看看安装了什么。这个选项的作用是告诉包管理器用vim-default-editor替换现有的nano-default-editor包。这是一个在shell配置文件中将EDITOR环境变量设置为vim的小包,如果你想默认使用Vim(比如配合git),这里是必须的。这是Fedora特有的。您不需要在其他发行版或操作系统上执行此操作,只需确保您的EDITORshell变量设置正确即可。概述快速总结一下我认为好的、干净的插件集:CtrlP:最小的模糊查找插件(纯vimscript)Fugitive:git的必备工具Trailing-whitespace:显示和修复(删除)尾随空白Air??line:改进的状态行(纯vimscript)Ale:在键入时突出显示输入错误或语法错误Ctags:不是Vim插件,而是一个非常需要的工具还有其他模糊查找插件,如command-t或iFavoritefzf.vim(非常快).问题是,fzf.vim不在Fedora中,我希望配置尽可能少。CtrlP可以,而且它更容易配置,因为它需要很少的依赖项。如果我要选择绝对最小配置,它将是:#cat~/.vimrcletmapleader=","letmaplocalleader="_"filetypepluginindentonletg:ctrlp_map=''letg:ctrlp_user_command=['.git/','git--git-dir=%s/.gitls-files-oc--exclude-standard']setexrcsetsecure但这可能太极端了,所以这里稍微大一点配置,下面是我的详细解释:"vim:nowrapsw=2sts=2ts=2et:"leadersletmapleader=","letmaplocalleader="_""filetypeandintentfiletypepluginindenton"incompatiblepluginsifhas('语法')&&has('eval')packadd!matchitend"对SSD友好(可能很危险!)"setdirectory=/tmp"将备份从项目中移开setbackupdir=~/.vimbackup"fuzzysearchletg:ctrlp_map=''letg:ctrlp_user_command=['.git/','git--git-dir=%s/.gitls-files-oc--exclude-standard']nnoremapb:CtrlPBuffernnoremapt:CtrlPTagnnoremapf:CtrlPBufTagnnoremapq:CtrlPQuickfixnnoremapm:CtrlPMRU"缓冲区和quickfixfunction!ToggleQuickFix()ifempty(filter(getwininfo(),'v:val.quickfix'))reopenelseccloseendifendfunctionnnoremapw:callToggleQuickFix()nnoremapd:bd"搜索anggreppingnnoremapg:copen:Ggrep!nnoremapK:Ggrep"\b\b":cwnnoremaps:sethlsearch!hlsearch?"ctagsgenerationnnoremapc:!ctags-R."per-projectconfigssetexrcsetsecureusecommaasleaderkey我喜欢将我的启动键映射到一个逗号,而不是默认的反斜杠\它是当你的手处于书写位置时Vim中最接近的自由键。此外,此键在大多数键盘布局中都是相同的,而\在每种型号或布局中都不同。我很少使用本地启动密钥,但下划线_似乎很合适。文件类型和关闭语法高亮接下来是非常重要的文件类型命令。看,Vim自带“内置电池”,8.2版本包括644种语言的语法高亮、251种文件类型定义(ftplugins),以及138种语言的缩进规则。但是,默认情况下不启用缩进,也许是为了为所有人提供一致的编辑体验。我喜欢启用它。一个简单的提示:如果你正在编辑一个非常大的文件并且Vim感觉很慢,你可能想要禁用语法高亮以加快速度。只需输入:synoff命令。Matchit插件Vim甚至附带了额外的插件,这些插件使某些功能不兼容,其中一个非常有用。它是matchit插件,它可以在某些语言中按%键查找匹配的括号。通常,您可以找到块的开头或结尾(左括号和右括号)或HTML匹配标记等。交换文件我想从我的旧配置中保留的许多设置之一是使用/tmp进行交换并在我的主目录中的单独目录中创建备份,你需要mkdir~/.vimbackup来创建这个目录。重要的是要了解,当您开始编辑时,Vim会创建一个称为“交换文件”的副本,所有未保存的工作都保存在该文件中。因此,即使停电,您的交换文件也包含大部分未保存的工作。我更喜欢使用tmpfs,因为我所有的笔记本电脑和服务器都受UPS保护,而且我经常保存。此外,大多数情况下,当您的SSH连接丢失而不是由于断电时,您将使用交换文件。交换文件对于大文件来说可能非常大,我很看重我的SSD,所以我决定这样做。如果不确定,可以把这句话删掉,改用/var/tmp,这样更安全。FuzzyFindPlugin现在,FuzzyFind是我离不开的插件。当你每天需要在服务器上打开20个文件时,使用:Ex或:e或:tabe等命令打开文件是没有问题的。并且在编码时,我经常需要打开数百个文件。正如我所说,CtrlP做得很好。它很小,没有依赖性,而且是纯Vim。它用Ctrl+P组合键打开,这对我来说有点陌生。我知道一些著名的编辑器(我记得是VSCode)使用这个组合键。问题是,这已经是一个重要的Vim绑定,我不想覆盖它。所以对我来说,赢家是启动键+启动键(逗号按下两次)。ctrlp_user_command只是改变了CtrlP获取文件列表的方式。它没有使用内置的递归文件列表(glob),而是使用gitls-files,这通常更好,因为它忽略了.gitignore中的内容,因此诸如node_modules或其他可能减慢列表速度的不相关目录之类的内容不会受到影响.使用开机键+B/T/F/Q/M打开缓冲区、标签、当前文件标签、快速修复缓冲区和最近使用文件列表,非常实用。具体来说,一旦您使用ctags生成了标签列表,这基本上就是数百种编程语言的“转到...定义”,并且不需要插件!这些都内置在Vim中。现在澄清一下,当我说输入Boot+B时,我的意思是按逗号,然后按B键,而不是像Control或Shift一样一起按。缓冲区管理虽然Vim现在支持制表符,但缓冲区管理是掌握Vim的一项重要技能。我通常有很多缓冲区需要做:bdelete很多。好吧,BootKey+D似乎是更快完成此任务的不错选择。我也喜欢关闭Quickfix窗口,所以还有启动键+W键组合,我在浏览搜索结果时经常使用它。Ggrep和逃亡插件搜索时,它与打开文件一样重要。我希望能够搜索代码库。为此,fugitive插件中有一个很棒的::Ggrep命令,它使用gitgrep并忽略垃圾文件,只在Git中搜索内容。由于Shift+K在Vim中是一个自由键,所以对于自动检索光标所在位置的单词非常有用。最后,如果能够使用启动键+G输入任意搜索模式就好了。请注意,这将打开一个名为Quickfix的窗口,您可以在其中浏览结果,查看下一个/上一个/最后一个/第一个出现等。这window还用于编译器或其他工具的输出,因此请熟悉它。如果您是新手,我建议您进一步阅读文档。使用fugitive搜索和检索顺便说一下,使用/键搜索是智能的并且区分大小写,这意味着如果所有搜索字符都是小写,Vim的搜索将忽略大小写。默认情况下,它会突出显示结果,我觉得我已经点击:noh(关闭突出显示)一百万次了。这就是为什么我有启动键+S来切换突出显示。我建议将来也阅读更多关于在手册中搜索的信息。接下来是搜索、检索。逃犯插件已经为你做到了。使用命令:Ggreppatterntogitgrep,结果会进入Quickfix窗口。然后简单地使用quickfix命令(:cn,:cp,等)滚动它们。CtrlP的快速修复集成的妙处在于,您可以通过键入匹配文件名或内容的方式在搜索结果中进一步搜索。Ctags启动键+C生成一个ctags文件以实现更好的导航,这在处理新代码库或执行包含许多跳转的较长编码任务时很有用。ctags支持数百种语言,Vim可以使用所有语言的知识来导航。稍后将详细介绍如何配置它。注意我已经讲过开机键+T打开所有标签的模糊搜索,还记得吗?这两个非常相似。通过在项目目录中创建.vimrc文件,键盘映射能够覆盖项目中的任何设置是个好主意。只需将它放在您的(全局).gitignore中,以确保您不需要在每个项目中编辑数千个.gitignore文件。这样一个项目的.vimrc可能看起来像这样(对于使用GNUMakefile的C/C++项目):"codingstylesettabstop=4setsofttabstop=4setshiftwidth=4setnoexpandtab"includeandautocompletepathlet&path.="/usr/local/include""功能键来构建和运行项目nnoremap:wall!:make!nnoremap:!LD_LIBRARY_PATH=/usr/local/lib./project如你所见,我通常将F2映射到F10等键来进行编译、运行、测试和类似操作。使用F9调用make,听起来不错。还记得MS-DOS上的蓝色BorlandIDE吗?如前所述早些时候,全局忽略.vimrc和(由ctags生成)标签是个好主意,因此您不需要每次都更新.gitignore:#gitconfig--globalcore.excludesfile~/.gitignore#cat~/.gitignore/.vimrc/tags/TAGS在我的个人配置中也有一些条目只与非美国键盘布局的人相关(我使用捷克语)。我需要为许多字符使用“死键”结合th的方法e变音符号与以下字母组成重音字符。这种方法在历史上被用在机械打字机上),这根本不可能,而且我宁愿键入命令也不愿按那些难以按下的组合键。这是问题的解决方案:“CTRL-]在我的键盘布局图上很难”CTRL-^在我的键盘布局上很难nnoremap:b#nnoremap:bpnnoremap:bn"我讨厌不小心进入Ex模式已经完全了解Vim,不。但如果需要,我可以简单地键入:help。而F1是一个关键键,离Esc键很近。我喜欢用它来进行缓冲区交换(:b#)和F2/F3下一个/上一个越用缓冲区越需要这个你有没有通过输入:visual以丑陋的方式进入Ex模式?许多初学者甚至不知道如何从这种模式退出Vim。对我来说,这很麻烦,因为我很少使用它。现在,熟悉ctags是一个成功使用Vim的关键因素。这个工具支持数百种语言,它会不小心为你不想要的文件创建标签,所以我建议忽略典型的垃圾目录:#cat~/.ctags.d/local.ctags--recurse=yes--exclude=.git--exclude=build/--exclude=.svn--exclude=vendor/*--exclude=node_modules/*--exclude=public/webpack/*--exclude=db/*--exclude=log/*--exclude=test/*--exclude=tests/*--exclude=\*.min.\*--exclude=\*.swp--exclude=\*.bak--exclude=\*.pyc--exclude=\*.class--exclude=\*.cacheAirlineplugin我不能忘记Vim的Airline插件。在Fedora的两个插件中,这个是轻量级的,不需要外部依赖,并且开箱即用地适用于我所有的字体。你可以自定义它,还有主题之类的东西。我只是碰巧喜欢它的默认设置。我必须提到有两个主要的Ctags项目:ExuberantCtags和UniversalCtags。后者是更现代的翻拍。如果您的发行版有它,请使用它。如果您使用的是Fedora35+,您应该知道您正在使用UniversalCtags。总结作为总结,我的建议是这样的。尽量保持你的Vim配置流畅和干净。这将在未来得到回报。切换到新配置后,我不得不重新学习“writeandquit”命令,因为我一直不小心输入:Wq,我有一个“小技巧”让它真正按照我的意图工作。好吧,这个可能真的很有用,而且会成功,我希望你明白我的意思::commandWqwq:commandWQwq最后一个快速提示:你可能需要经常更改默认的Vim配置,以查找我在这里向您展示的内容与您自己的品味之间的舒适区。使用下面的别名,这样您就不需要一直搜索历史记录。相信我,当Vim用户在命令历史中搜索“vim”时,找不到任何相关内容:aliasvim-vimrc='vim~/.vimrc'就是这样。也许这会帮助您在没有大量插件的情况下浏览Vim的丰富世界。“简单”的Vim也不错!要尝试您刚刚阅读的内容,请安装软件包并检查这些配置:test-f~/.vimrc&&mv~/.vimrc~/.vimrc.backupcurl-shttps://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc-o~/.vimrcmkdir~/.vimbackup特别感谢MarcDeop和MelanieCorr审阅本文。更新我在这个配置中幸存下来!我唯一的问题是CtrlP插件的结果顺序不同。文件的fuzzing算法和fzf.vim插件的不同,所以我以前用各种搜索词都能找到的文件现在找不到了。我最终安装了Fedora的fzf包以进行更相关的文件搜索,它带有一个vim函数FZF,可以绑定到启动组合键。请在我的GitHub存储库中查看更新后的配置文件。一路走来,我学到了很多东西。多亏了很多插件,我忘记了一些键绑定。