【问题标题】:Display some special character as a linebreak in Vim在 Vim 中显示一些特殊字符作为换行符
【发布时间】:2011-08-06 12:55:42
【问题描述】:

我想在 vim 中显示一些(任意)特殊字符作为换行符 。 到目前为止,我尝试过滥用(当然是极端的滥用:)不可破坏的空格输入

:set list listchars=nbsp:<CR>

这不起作用,貌似是因为命令不接受。 有什么我可以在这里使用的吗? \r 也没有用。

请注意,我不想编辑文本文件。目标是让行块(一些相关代码)相对于 vim 操作被视为单行,但显示为多行。在这些情况下,特殊字符(待定义)仅用于将此块结构保存在文件中替换换行符 \r。

【问题讨论】:

  • 另一个想法是使用 vim 的 wrap 功能,配置为它会破坏任何比一个字符更长的内容,但只有在遇到特殊字符时才会中断。 breakat 选项可用于定义此特殊字符。但我在这里遇到的第一个困难是 ":set textwidth=1" 并没有像我预期的那样缩短行数。
  • 似乎 textwidth 选项只影响格式,而不影响我暗示的(软)包装。 :wrap 命令是否有任何类似的选项或告诉它始终在给定字符处中断的选项?
  • 您能否提供更广泛的问题背景?您想通过将单条物理线显示为多条显示线来解决什么问题?
  • 我有一个使用某种语言的代码文件。我希望能够在 vim 中逐行执行它(通过为过滤器命令分配一个映射)。但并不是文件中的所有行都可以自己执行,因为它们是不完整的。所以我需要以某种方式识别这些代码块并将文件逐块发送到过滤器。最简单的方法是,如果这些单独的块在内部被视为单行,并且只有显示在多行上。每个块可以由代表整个例程或更多例程的代码组成。它们是否属于一起只能由口译员或肉眼确定。
  • 我建议您根据您最后的评论解释问题(及其标题)。

标签: vim


【解决方案1】:

鉴于您在 稍后发表评论,我会建议以下解决方案。依赖组 按缩进、语言语法或标记折叠的代码行。 这三种方法都是自动的,不需要手动 褶皱的产生。选择哪一种取决于您的语言 利用。请参阅:help foldmethod,如果出现以下情况,请随时评论此答案 您在折叠方面需要任何帮助。

除非您使用的语言的语法在 Vim,最方便的方法是使用折叠标记或 定义一个自定义表达式来计算每行的折叠级别。 前一种方法意味着围绕每一组线折叠 带有特殊的文本标记(可以包含在注释中,而不是 打破语言的语法规则)。默认情况下,这些标记 是{{{ 和}}};见:help fold-marker 和:help foldmarker 了解如何更改它们。使用

:set foldmethod=marker

启用这种折叠模式。

定义一个表达式来计算每一行的折叠级别是 更灵活的方法。它允许使用任何逻辑(可以是 用 Vimscript 表示)来确定折叠级别。例如,要 折叠以单个空格开头的行组使用以下内容 设置:

:set foldmethod=expr
:set foldexpr=getline(v:lnum)[0]=='\ '

有关自定义折叠的更多详细信息,请参阅 :help fold-expr 表达。

当相互依赖的行被组合成折叠时,你 可以轻松地将任何特定折叠的内容传递给过滤器 程序。将光标移动到目标折叠内的一行,然后键入 [zV]z 选择整个折叠,然后是 !,然后输入 命令运行。为了节省打字,您可以定义映射

:nnoremap <leader>z [zV]z!

如果命令始终相同,则可以将其包含在映射中:

:nnoremap <leader>z [zV]z!cat -n<cr>

将上面的 cat -n 部分(我的示例命令)替换为 适合您的情况的命令。

【讨论】:

  • @rembremading:请告诉我这个解决方案是否适合你。
  • 他自“8 月 7 日”以来就没有出现过,他建议的编辑是说“cmets 不再工作”,这意味着他不再使用同一个帐户。所以,你的回答几乎肯定不会被接受。
【解决方案2】:

我想你可能想看看this vimcasts episode。可能不是你想要的,但可以让你到达那里。祝你好运!

【讨论】:

    【解决方案3】:

    最后,我的解决方案是在文件的各个位置插入不间断的空格和换行符。 :set list listchars=nbsp:$ 然后可用于显示这些“特殊换行符”。它们的存在允许解释代码将由该组合分隔的行块识别为相关行。

    当然,这并不能回答问题。据我目前所知,答案是:set list 和:wrap 都不能用来实现这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-12
      相关资源
      最近更新 更多