Vi & Vim

使用vi和Vim系列文本编辑器的人员的问答

2
如何检查HTML属性中的拼写?
Vim拼写检查功能在大多数情况下都非常有效-甚至还足够聪明,可以区分大多数语言中的文字,注释和代码。但是我有HTML拼写检查问题: <div title="text with mistaek #1" data-text="text with mistaek #2">text with mistaek #3</div> 在上面的示例中,仅div高亮显示内部错误(#3)。这将是巨大的,拥有所有相关属性检查-至少title和data-*,理想-属性的配置清单。 是否可以通过配置或VimScript实现?插件也可以,但是理想情况下,它应该可以针对HTML类似文件的文件(例如ASP .NET MVC cshtml文件)进行配置。

1
我可以强制括号匹配显示在多个窗口中吗?
我有一个源文件,其中包含一长串深层嵌套的异构结构。由于结构很长,我想: 使用:split命令将屏幕分为两部分。 向下滚动一个窗口,向上滚动另一个窗口。当窗口1上的光标在圆括号上并且另一个圆括号在另一个窗口中可见时,我希望另一个圆括号在另一个窗口中被突出显示(就像在同一窗口中显示一样)。 如何完成第二步?

2
折叠失败:vim找不到任何折叠
我正在尝试折叠一些PHP代码,并且在文章结尾处包含了一些我想折叠的代码的简化版本。 我尝试了以下vim命令,但仅以下ex命令有效。non-ex命令不起作用,并在状态行中产生一条红色的白色消息:我找不到任何折叠。 :help folding :help fold-commands :help foldmethod :set foldmethod=syntax zi - toggle folding zj - move to top of next fold zk - move to bottom of previous fold za - toggle current fold open and closed zo - open current fold zc - close current fold zA - …

1
如何轻松获得一段文本的长度?
有时我想检查一段文本的长度,例如在此示例中: str = 'Hello, world!' if len(str) == 13: print('Hello back to you!') 我想知道字符串的长度Hello, world!。 我现在做的,就是在列号rulerformat用%c,我把我的光标上的第一个字符,然后去到最后,和手动。减去。 但是,这很尴尬。例如,我想要的是在标尺中以虚拟模式进行选择的时间长度,但是据我所知,对此没有任何选择。 能做到吗?还是以其他更简单的方式?

1
为*和+寄存器定义自定义命令
如果我正在使用带有该xterm_clipboard功能的Vim版本,则可以通过寄存器获取系统剪贴板内容+。 如果我使用的构建不具有此功能,我可以使"+注册调用我的自定义程序来检索和设置系统剪贴板(xsel -bo和xsel -bi,或同样使用xclip)吗?与"*呼叫xsel -po和相同xsel -pi。 关键是能够键入类似内容,"+p而不必担心该功能是否可用。打字:r !xsel -b<Enter>是不是我要找的:我希望同样的击键工作,我想贴变种遵循什么可用的“真”寄存器(P,gp,...)。 好处:我可以为其他寄存器名称定义自定义命令吗?

1
正则表达式喜欢比赛中较短的比赛?(这比不贪婪更复杂)
我正在尝试创建用于在缓冲区内执行模糊搜索的脚本。主要思想是接受一些输入,然后.\{-}在每对字符之间插入,例如foo变为f.\{-}o.\{-}o。 这工作得很好,但是提出了很多不理想的比赛。我认为模糊搜索应该首先产生最短的匹配项。考虑以下示例: public void put() 对put(so,p.\{-}u.\{-}t)进行模糊搜索将匹配整个字符串public void put,但是该put匹配范围内的较短字符串会更有用。 非贪心运算符擅长查找较早结束的匹配项,但我需要同时可以偏向于较晚开始的匹配项的东西。从概念上讲,它在两个方向上都应该是非贪婪的。这可能吗?

4
添加具有居中文本的80列宽的注释标题块
由于某种原因或其他原因,我经常将代码划分为多个小节,这些小节由标头分隔,如下所示: ################################################################################ #################################### LOAD ###################################### ################################################################################ 这是3列80列的宽线,#中间居中。到目前为止,我还没有找到在vim中生成它们的快速方法。 我通常要做的是沿着的内容,80i#然后yypp给我3行,但是然后我需要导航到中间并添加文本。我通常使用replace来执行此操作,但是replace不会使标头居中居中#…… #因此,我#手动删除了多余的。 如何将文本居中居中?而达到此结果的更快方法是什么?



4
切换.c / .h缓冲区
我通常使用2个垂直分割的窗口。 我想解决的问题是:轻松地从标题<->实现文件中来回跳转 我正在调查两种方法,但没有运气: 在当前窗口中打开备用文件:有很多方法可以执行此操作,但是,我找不到一种方法可以记住我在上一个文件中的位置(即,跳转到标头,跳回,但不回到原先的位置) )。 在另一个窗口中打开备用文件:这是明确定义的,因为我只使用2个窗口,但是我缺乏vim知识来做到这一点。

5
Vim可以写增量行吗?即在每行A变成B,而1变成2
我想这样写: A = mapping[0] B = mapping[1] C = mapping[2] D = mapping[3] E = mapping[4] F = mapping[5] G = mapping[6] H = mapping[7] I = mapping[8] J = mapping[9] K = mapping[10] L = mapping[11] M = mapping[12] N = mapping[13] O = mapping[14] P = mapping[15] Q …
8 macro 

1
按地址删除多行
我当时正在看这个vimgolf挑战,我认为按地址删除特定行会很好。我知道我可以:<line_number>d用来做,但是有没有办法列出d要运行的多个行号?我想象这样的事情::1,4,32d,但是它当然不起作用。 怎么做?

1
通过:g / ^ / norm和:%norm了解行参考差异
假设我有以下非常简单的文件 a b c d e 并且我决定要在每行之后添加空行。我立即想到了几种不同的方法。我们可能会这样做(从而接受失败)。我们可能会录制一个类似的宏,qqo<ESC>jq并重复几次。 在我看来,另外两种方法似乎更明显。 首先,我想我会在每行上发出:norm命令o。所以我跑了:%norm o。但是实际发生的是,我们得到5条空行,然后是上面未分隔的行。我的解释是%norm,vim实际上在这五行文件的前五行中接收了以下普通命令发出的消息。该o命令创建新行,并且vim是“哑”的,因为它是通过行号而不是实际上通过其他标识符来引用的。 好吧,我很尴尬。当然。我尝试了其他一些方法,看看是否可以使上述方法起作用,但是,我不能。出于好奇,我尝试了另一种我最喜欢的大规模应用方法。这导致我尝试:g/^/norm o。令我惊讶的是,这很好!因此,在我看来,这里的vim似乎并不像上面那样“愚蠢”,并且引用行的不仅仅是行号。 到底是怎么回事?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.