2011-08-06 28 views
2

换行符我想在vim显示一些(任意)特殊字符作为换行符<CR>。 到目前为止,我试图误用(当然极端的滥用:)非易碎空间打字显示一些特殊的字符作为在vim

:set list listchars=nbsp:<CR>

不工作,似乎是因为该命令不接受<CR>。 有什么我可以用在这里的<CR>? \ r也没有工作。

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

+0

另一个想法是使用vim的wrap功能,它的配置使得它打破了任何一个字符比一个字符长的情况,但只有在遇到特殊字符的时候。 breakat选项可以用来定义这个特殊字符。但我的第一个难点在于“:set textwidth = 1”不会缩短行数,正如我所期望的那样。 – rembremading

+0

看来,textwidth选项只影响格式化而不影响(软)包装,这是我暗示的。对于:wrap命令还是一个告诉它总是在给定的字符处中断的选项,是否有类似的选项? – rembremading

+0

您能否提供一个更广泛的问题背景?通过将单条物理线显示为多条显示线,您尝试解决什么问题? –

回答

0

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

0

我的解决办法,最终,被插入非中断空格和换行的文件中的相应位置。然后可以使用:set list listchars=nbsp:$来显示这些'特殊线段'。它们的存在允许解释代码来识别由该组合分隔的线段作为相关线段。

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

1

鉴于您在附加 评论了问题的大背景,我建议以下解决方案。通过缩进,语言的语法或标记折叠编码的行依赖于 。任何这些 三种方法都是自动的,不需要手动创建折叠。哪一个 取决于你使用的语言。如果您需要折叠帮助,请参阅:help foldmethod,或询问 我的评论。

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

:set foldmethod=marker 

启用这种折叠模式。

定义的表达式来计算折叠级别为每一行是更 灵活的方法。它允许使用任何逻辑(可以用Vim 脚本表示)来确定折叠级别。例如,折叠线的基团 开始于单个空间使用

: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 - 我的例子命令 - 为您定制一个)。

+0

http://stackoverflow.com/suggested-edits/87509 – thirtydot

+0

@rembremading:请让我知道这个解决方案是否适合你。 –

+0

自“8月7日”以来,他一直没有见过,他的建议编辑说“评论不再有效”,这意味着他不再使用同一个帐户。所以,你的答案几乎肯定不会被接受。 – thirtydot