Vim:如何在缩进脚本中更改文本

6

我最近从Eclipse转到了Vim,我很喜欢它。虽然我还有一些小问题需要解决,但其中一个让我头疼的问题是PHP文档注释。在Eclipse中,我可以输入:

/** [enter]

接下来的一行将自动填充

 * 

所以我会有:

/**
 * [comment goes here]

我想知道是否有类似于vim的东西。似乎有一些插件可以通过运行命令来自动生成文档注释,但我希望在打字时自动完成它们。
我正在使用PHP缩进脚本(http://www.vim.org/scripts/script.php?script_id=1120),并且已经让它识别了何时处于文档注释块内,但我不知道如何在块内按下回车后实际更改文本并添加“*”。
我尝试过其他插件所做的事情:
let @z = ' * '
put! z

也尝试了这个:

exe 'normal!' '"zgp'

但是没有运气。这不可能从缩进脚本中实现吗?如果不行,那么在我输入时如何让Vim识别文档注释块并相应地进行操作呢?

非常感谢您的帮助!

3个回答

2

不需要在缩进文件上浪费时间。Vim的formatoptions会为您完成这项工作,并支持多种语言(不仅限于PHP)。

确保您的formatoptions中包含r

:setlocal fo+=r "to set
:set fo? "to query

您可以将此内容包含在您的.vimrc.vim/ftplugin/php.vim中(如果您只想为PHP激活此功能)。
有关formatoptions和文件类型插件的更多信息,请参见:

1
这是正确的方法。作为非常全面回答的快速总结,我建议在 .vimrc 中添加 set fo+=r - Kris Jenkins
奇怪,当我禁用所有插件并设置fo+=r时,它可以工作,但是当使用原始的PHP缩进脚本(没有修改)并设置fo+=r时,它就无法工作了。set fo? == "qrowcb" ...有什么想法吗?是否有其他设置可能会禁用此功能? - andrew
好的,看起来是我的vimrc中的“filetype plugin on”导致fo+=r无法工作...具体来说是在ftplugin/php.vim中(或者它加载的脚本)出了问题。不加载ft插件有什么不好的地方吗?或者有没有一种方法可以在加载后强制注释起作用? - andrew
我在$VIMRUNTIME/ftplugin/php.vim中没有看到任何禁用注释格式的内容。你可以尝试将一些东西放在你的after-directory中(参见:he after-directory)。 - johnsyweb
1
如果你怀疑一个脚本正在改变你的选项之一的值,:verbose set formatoptions(例如)将告诉你fo上次被设置的位置。 - johnsyweb

1
将以下代码添加到您的vimrc文件中,是否可以实现您想要的类似效果?
autocmd BufNewFile,BufRead *.php setlocal formatoptions+=r formatoptions+=o
autocmd BufNewFile,BufRead *.php setlocal comments=s1:/*,mb:*,ex:*/,://,:#

我目前还无法弄清楚如何在不覆盖<!-- --->注释的情况下使其正常工作,但这样做会破坏使用<!-- -->注释的自动缩进。

编辑。像Johnsyweb的发行版一样,将://,:#添加到comments中。


“comments” 应该由提供的 php.vim 缩进脚本自动设置。 <!-- [...] --> 注释是 HTML 语法的一部分。 - johnsyweb
@Johnsyweb 是的,但是上面的代码片段通过执行 comments=... 覆盖了它。如果我改为执行 comments+=...,那么 /* */ 样式的注释将无法正常工作 --- 我不确定为什么。 - dennycrane
对我来说开箱即用:comments=s1:/*,mb:*,ex:*/,://,:# - johnsyweb
你的发行版似乎与 OP 和我的不同。然而,现在可能对你不起作用的是执行 <!-- --> 注释并自动缩进这些注释中间部分(这是我默认的注释内容 --- comments=s:<!--,m: ,e:-->)。我说得对吗? - dennycrane
我不知道你如何确定我的发行版不同,因为formatoptions默认为tcq,所以如果未设置r,我不希望注释格式化按请求工作。在某种程度上,你是正确的,因为我没有为PHP文件启用HTML语法,但我没有预料到这一点,我更喜欢一个源文件对应一种语言。 - johnsyweb

0

尝试将以下内容添加到您的vimrc文件中:

let g:PHP_autoformatcomment=1

我在使用Mac电脑,它似乎默认已启用。功能与您所述的完全一致。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接