Vi & Vim

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



1
为什么Vim正则表达式不允许超过9个捕获组?
从中:h E65我们可以看到,Vim在替换命令中不允许超过9个捕获组。 例如,以下命令将起作用: s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)/\9\8\7\6\5\4\3\2\1 但是,这个带有一个捕获组的捕获组将失败: s/\v(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)/\10\9\8\7\6\5\4\3\2\1 我的问题不是关于为什么失败(这是Vim的硬限制),而是关于为什么Vim根本没有这个限制? 另外,我知道具有超过9个捕获组的真实正则表达式可能很难阅读和维护,但我仍然很好奇。


1
如何退出ex输入模式?
输入时,我陷入了ex输入模式:i。现在,我不能使用任何命令。全部只有一串文本。按Escape键不能使我摆脱困境,按输入:visual不能使我摆脱困境,而按输入visual不能使我摆脱困境。我如何摆脱困境?
16 ex-mode 



2
修复在vi(而非vim)中显示A,B,C,D的箭头键
我知道在vim中我可以添加 set nocompatible 在.vimrc以避免箭头键显示A,B,C,在插入模式d。 但是我正在使用vi 版本4.0(gritter)12/25/06。 如何获得相同的行为? ==编辑==(1) 我正在使用Arch Linux的vi版本,该版本是通过以下命令从此CVS存储库(最后一次提交,2007年2月24日)构建的: make PREFIX=/usr LIBEXECDIR=/usr/lib/ex PRESERVEDIR=/var/lib/ex \ TERMLIB=ncurses FEATURES="-DCHDIR -DFASTTAG -DUCVISUAL -DMB -DBIT8" 并使用以下三个补丁:fix-tubesize-short-overflow.patch,navkeys.patch和preserve-dir.patch。 ==编辑(2)== 这些问题发生在LXTerminal 0.2.0,白蚁10-1,Tilda 1.2.4-1,终结者0.98-1和xterm 320-2中,但在urxvt v9.21和Linux虚拟控制台中都没有。 ==编辑(3)== 根据单一Unix规格左箭头,向下箭头键,右箭头,向上箭头分别对应于以下capname: ,,kcub1 和。比较这些capterm中的terminfo条目,可以得出:kcud1kcuf1kcuu1xtermrxvt-unicode-256color $ infocmp xterm rxvt-unicode-256color | grep -E 'kcuf1|kcub1|kcud1|kcuu1' kcub1: '\EOD', '\E[D'. kcud1: '\EOB', '\E[B'. kcuf1: '\EOC', '\E[C'. kcuu1: …


2
将f和t运动扩展到下一行
有没有一种方式,t{char}并且f{char}将继续在下一行工作,如果{char}不存在,在给定的线? 我想避免使用/{char}<CR>,以节省1个按键并没有突出显示搜索,特别是当我需要这个结合动词(如dfa,ct.)。

2
WinEnter,BufEnter,BufRead,语法,FileType事件的顺序是什么?
我已经通过了autocmd.txt帮助,但是关于此的信息是分散的,并不总是存在(例如,带有BufRead)。 懂得这一点的人能否列出这些事件的顺序-也许用括号标出条件,例如 WinEnter BufEnter (if this window is for a different buffer than the current) 等等,以便于参考? 注意(摘自下面我的评论):我不是在谈论对它们的个别解释,这没关系,而是在讨论它们如何相互影响以及发生的顺序。例如,WinEnter说“ Vim在WinEnter自动命令之后执行BufEnter自动命令”,TabEnter说“在触发WinEnter之后并且在触发BufEnter事件之前”,它们像这样分散在许多地方。有时BufRead根本没有提及它(例如,没有提及它是在BufEnter之后还是之前运行-也许专家可以从那里的其他信息中推断出它,但是我不能。 所以,我的意图是为这些事件的顺序创建一个简单的参考,非专家可以快速查找这些事件的顺序,autocmd 事件规范。


1
远程文件的文件名完成
我的朋友几天前在Emacs上给我展示了一个很酷的技巧,他可以在远程服务器上打开文件,而我立即想到“也应该在vim中这样做”,这是事实。 我可以:e scp://user@server//filepath这样做,没问题;)。但是,他可以只键入服务器名称,然后完成文件路径和名称(带有选项卡),这是我无法做到的。有人知道这是否可以在vim中完成吗?

3
<Esc> O上的减速块(插入法线以在光标上方插入新行)
通常,当我处于“插入”模式时,我会Esc按一下进入“普通”模式,然后立即按一下O以在光标上方开始新行并进入“插入”模式。 但是,当我这样做时,在击中O之前有1秒钟的延迟,然后才出现任何可见的响应。此外,如果我开始是1秒的延迟期间键入新的文本,如果新的文字与任何特定的字符集的开始(例如j,k,m,n,o),我在我没有一些其他的操作中结束了打算,经常弄得一团糟,在这一点上,我必须停下来,用撤消和重做摸索,直到我有把握地确定自己没有破坏为止。 为了避免这种不愉快,我养成了每次输入后都要暂停一秒钟的习惯O。但这会使我放慢速度,并阻止我成为原本应该成为Vim的速度恶魔。 是什么原因造成的?是否有修复程序或解决方法?

3
如何折叠评论?
语法foldmethod很棒,但有时我只想将注释折叠到源文件中。 同样,注释的语法折叠仅适用于C样式注释,例如: /* ... */ 但不用于注释样板: // // // ... // 甚至对于非C类语言的注释块,例如: # # # ... # 如何用vim配置它?
16 folding 

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.