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

关于vim的12个编辑技巧

时间:2023-03-13 13:30:24 科技观察

vim是一个非常好用的编辑器,应用范围很广。但是关于vim,总有一些你不知道的东西,需要我们继续学习。我经常使用vim,经常看到vim高手在各种社区和论坛分享自己的经验。今天我们将一些常用的部分总结出来分享给大家。1、使用内置帮助(built-inhelp)使用vim的内置帮助是个好习惯(虽然很多朋友更喜欢上网搜索相关的使用方法)。查看帮助的语法如下表所示:prefixexampledescription::help:wabout:wcommandhelpnone:helpjabout"j"keyinnormalmodecontexthelpv_:helpv_Jaboutusing"Jincontext"可视模式帮助键i_:helpi_插入模式帮助在上下文中使用“Esc”键/:help/\n搜索模式帮助“\n”2.以普通用户身份打开,编辑系统时文件或权限保护的文件作为root用户,很容易忘记在vim编辑前加上sudo,这样会以只读方式打开文件,即编辑后无法保存。但是此时,你可能已经对文件做了一些修改(还没有保存),显然,强制退出不是一个好的选择。在这些情况下,在vim中键入以下命令::w!sudotee键入此命令后,您将被要求输入sudo命令的密码,然后可以保存文件。注意:我们应该使用sudoedit命令而不是sudovim来编辑需要超级用户权限的文件。让我们分解上面的命令看看::w-这是写命令。由于没有给出参数,vim会将整个文件写入标准输出;!sudo-将sudo命令作为shell命令而不是vim命令运行;tee-tee命令用于读取标准输入并将其写入标准输出或文件;%-vim将其替换为您正在编辑的当前文件的名称。:w命令将整个文件写入STDOUT(标准输出);然后我们使用sudo命令(毕竟我们正在编辑系统文件)来获得临时权限。百分号(%)表示文件名,tee命令从STDOUT获取vim的输出并将其写入%文件。这基本上适用于|sudotee/etc/ssh/sshd_config,有点复杂...3.将所有空格变成制表符(反之亦然)我们都喜欢使用制表符或空格,但是如果我们正在编辑的文本使用确切的缩进方式与我们习惯的相反?3.1将所有空格转换为制表符如果当前文件使用空格进行文本缩进,想将其转换为制表符,则需要运行以下两个vim命令::setnoexpandtab:retab!这会将所有空格转换为其等效的制表符。如果文档使用两个空格作为缩进宽度,它们将被转换为1个制表符。如果将4个空格用作单个缩进宽度,则这4个制表位将替换为1个制表符。3.2将所有制表符转为空格如果要编辑的文件是制表符缩进,想将制表符转为空格,需要运行以下4条vim命令::set:settabstop=4:setshiftwidth=4:retab第一个命令(expandtab)告诉vim使用空格来扩展制表符,第二个命令(tabstop)设置使用多少个空格作为“缩进块”。在我们的例子中,我们定义了“1个制表符=4个空格”;使用>>运算符时,shiftwidth命令用于控制缩进,也设置为4个空格。最后,retab命令将所有制表符(用于缩进)转换为空格。4.缩进所有缩进不正确的行,在python或YAML程序中会报错,导致程序无法正常运行。要缩进所有行,请按gg到达文件顶部,然后按=表示“缩进”,最后按G表示“最后一行”。这将自动从第一行缩进到最后一行。下面显示了我使用:gg=G命令进行缩进的演示:如您所见(从这个有限的预览中),所有行都正确缩进了。5.粘贴代码时保留缩进我们都有过从互联网上复制代码的时候。粘贴代码到文件时,缩进乱了,怎么办?为避免这种情况,请将以下代码添加到您的.vimrc文件中:setpastetoggle=在对您的vimrc文件进行上述更改后,在粘贴代码之前按F2键,这样做将确保代码粘贴正确缩进。6.以正确的压痕深度开始书写。假设光标在第一行第一列,但是要写的内容需要缩进,不按tab键和空格键怎么办呢?答案是在普通模式下按S键。当光标位于该行的第一列时,按Esc键进入正常模式。然后按S(大写)键,这会将光标移动到适当的缩进深度并自动进入插入模式,以便您可以开始键入。在上图中,我的光标位于第一列。按S键,光标移动到正确的缩进深度,Vim从正常模式切换到插入模式。7、保存文件前显示差异我们可能遇到过这样的情况:我修改了这个文件,但是我忘记了我做了什么修改,我担心有些修改可能是错误的。解决这个问题的方法是查看缓冲区和文件之间的区别。在vim中可以执行以下命令::w!diff%-我们把上面的命令分解一下看::w用于保存/写入,在这个特定场景下,如果命令中没有指定文件名,输出将是将输入写入STDIN(标准输入)文件;:!是执行shell命令的语法,在本例中,我们在shell中运行diff命令;%代表当前未被修改的文件名;试试这个::!echo%-是diff命令的STDIN文件。所以该命令首先将所有[unsaved]内容写入STDIN文件。diff命令然后读取当前文件(%)并将其与STDIN(-)文件进行比较。这个命令大致等同于这个shell命令:diff8,显示拼写错误我们应该都用过Microsoftword,它的拼写检查器会在拼写错误的单词下面有一条红色的波浪线。vim也有内置的拼写检查器,但默认情况下是关闭的。我们可以启用它::set,你可能会看到拼写错误的单词突出显示,突出显示的方式取决于你的vim配色方案。我在拼写错误的单词下面有一条白色下划线,如下图所示:要将其设置为vim的默认值,请在.vimrc文件中添加以下配置:set9。显示行号像许多vim用户一样,您可能喜欢在vim中显示行号。有两种显示行号的方法。一种是绝对行号,在这种情况下,每行显示绝对行号,就像任何其他代码编辑器或IDE一样。第二个是相对行号。在这种情况下,当前行的行号为0,其他行的行号相对于光标所在行。这两种情况,不仅可以二选一,其实可以两者兼得。通过将以下行添加到.vimrc中,可以在vim中启用“混合行编号”:setnumber这将在光标所在的行上显示绝对行号,在其他行上显示相对行号。如下图:当前光标在第44行,所以该行显示的是绝对行号;其他行(光标上方和下方的行)显示相对行号。10.使用vim打开文件,同时将光标定位在某一行。默认情况下,我们使用vim打开文件,光标会一直在第一行。在某些时候,我们希望光标定位在我们指定的一行而不是第一行。这可以通过使用+n(n为行号)选项来实现,当然前提是你需要知道打开文件的总行数要大于等于n,如下:vim+n<文件名>11.使用可读的配色方案在使用配色方案时,人们通常会选择他们认为最吸引人或最美观的方案。但是当你将vim作为代码编辑器兼IDE时,最好放弃一些引人注目的东西,而选择具有更好视觉指导的配色方案。好的配色方案看起来不错,但好的配色方案可以帮助您轻松地借助颜色识别关键字、变量和其他标识符。当然,每个人的喜好不同,配色当然也不同。我们在下图中贴出了几个大家认为比较顺眼的解决方案,可以作为参考:12.插入模式下的删除文本我们都知道在普通模式(normalmode)下,可以使用d和x键删除文本,那么如何在插入模式下执行相同的操作(如dd)?以下是一些常用的方案:ctrl+w删除前一个词(word)(相当于普通模式下的db);ctrl+h删除前一个字符;ctrl+u删除当前行前面的所有字符(相当于普通模式下的d0);ctrl+k删除当前行中的所有主要字符(相当于普通模式下的d$)。