Vim如何帮助我记住BibTeX文件中的结尾逗号?


11

我编辑了很多BibTeX文件,但我经常忘记结尾的逗号:

例如:

@Book{cooke2015british,
 author = {Cooke, Lez},
 title = {British Television Drama},
 publisher = {Palgrave on behalf of the British Film Institute},
 year = {2015},
 keywords = {about}
 address = {London},
 isbn = {978-1844576234}
 }

您会看到我忘了在后面添加逗号keywords = {about},这意味着我不得不花时间调试。Vim有什么办法可以让我记住?顺便说一句,我有bib_autocomp.vim插件...


我不知道,但是您可以尝试使用以下方法修复它::%s/[^ ,]\zs\ze\n\s*[^ }]/,/
佐藤桂2015年

Answers:


6

快速而肮脏的解决方案:

:match Error /^\s\+.*,\@<!\ze\n\s\+\w/

您也可以使用相同的模式为BibTeX文件创建特殊的语法。

关于使用的正则表达式的一些解释:

  1. ^\s\+ 搜索缩进的关键字。
  2. \ze 停止模式匹配,以便不标记下一行。
  3. ,\@<!\n 搜索不以逗号结尾的行。
  4. \n\s\+\w 保证在当前扫描之后有一个新条目。

可以使用vimgrep以下相同的模式在错误的行之间跳转:

:vimgrep /^\s\+.*,\@<!\ze\n\s\+\w/ %

如果快速修复窗口没有自动打开,则可以使用打开它:copen。并且:cnext:cprevious可用于误差之间跳跃。


很好!当我按n时,是否可以使它跳到下一个错误?
克里斯蒂安(Kristian Nordestgaard),

我已经更新了答案,以包括您的要求。看看是否适合您。
Vitor

0

一种可能性是定义.vimrc添加缺失项的快捷方式,

例:

:map \q  :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/<CR>

\q在离开之前或调试时使用。


不为我工作?我明白了E10: \ should be followed by /, ? or & 24,1 60%,但也许我做错了吗?
克里斯蒂安(Kristian Nordestgaard),

@KristianNordestgaard,.vimrc我们必须删除首字母“:”。请尝试map \q :%s/\v([}"])(\s*\n\s*\S+\s*\=)/\1,\2/e<CR><CR>
JJoao 2015年
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.