Vim:重新格式化和重新评论的自动化方式?

时间:2012-09-27 20:29:54

标签: vim formatting

我在代码中有一些文档,我想很好地格式化:

# book_id - integer
# chapter_id - integer (Optional)
# relative_url - Text: the url of the screencast file on S3, relative to the book's url
# view_count - integer

我安装了Tabular.vim,这让我走得很远:

# book_id      - integer
# chapter_id   - integer (Optional)
# relative_url - Text: the url of the screencast file on S3, relative to the book's url
# view_count   - integer

我想要一些自动生成这样的代码的方法。也就是说,包裹到79个字符,如果从前一个注释继续一行,则缩进。我得到的是:

# book_id      - integer
# chapter_id   - integer (Optional)
# relative_url - Text: the url of the screencast file on S3, relative to the
# book's url
# view_count   - integer

我正在寻找的是:

# book_id      - integer
# chapter_id   - integer (Optional)
# relative_url - Text: the url of the screencast file on S3, relative to the
#                book's url
# view_count   - integer

是否可以在现有的插件或热键序列中执行此操作?我知道gq,它会将文本重新格式化为vim中设置的字符宽度,但它不会在注释等内容中添加缩进。

2 个答案:

答案 0 :(得分:5)

您可以使用formatlistpat选项(:set fo+=n需要工作):

1。删除#

:%s/^# //

2。设置flp选项

:setl flp=^[^-]*-\\s

3。做格式化

gggqG

4。前置#

:%s/^/# /

您还可以使用indentexpr选项:

2a上。设置inde选项

:setl inde=15

2B。插入空行

:g/^/pu_

5。删除空注释

:g/^# $/d

答案 1 :(得分:0)

在这些记录的帮助下,自动执行任意任务的最简单方法也许就是这样。通过录制,您可以录制使用第一次时间修复文档的任何命令,然后非常轻松地重复这些命令。

例如,假设您提到的文档位于文件的开头:

首先,使用set textwidth=79让Vim知道每行的最大字符数。然后:

  1. qq开始录制
  2. gg转到文件开头
  3. gq}重新格式化文档块。
  4. :Tabularize -以使用您的插件
  5. :bnext转到下一个缓冲区
  6. q停止录制。
  7. 现在,如果按1000@q,将对vim中打开的所有缓冲区重复录制。您也可以在需要为当前文件执行时按@q。有关详细信息,请查看:help gq:help q