Vim-Sexp - 如何将每个内部表达式移动到新行?

3
我有安装了非常棒的vim-sexpvim-sexp-mappings-for-regular-people插件,并且我遇到了一个我不确定如何解决的情况。
假设我有以下表单:
(alimony barbara (code determinant) eclair final-countdown)

我该如何将其转换为:

(alimony
  barbara
  (code determinant)
  eclair
  final-countdown)

我可以在每个内部表单/元素之前插入换行符,但那有点繁琐。应该有一种方法可以在有或没有sexp插件的情况下完成。

'<,'>s/\s/\r/g。当然,(代码决定因素)你要自己小心。jk - nakiya
1
我喜欢使用vim,并在IntelliJ IDEA中使用vim-mode的Cursive插件。然而,它无法读取你的思维,对于这种类型的转换,你必须手动插入<cr>。对于你的情况可能也是如此。 - Alan Thompson
我不知道有一种开箱即用的方法来实现它。由于正则表达式也会干扰缩进(如果您使用例如fireplace并重新格式化外部形式,则可以),除了混淆内部形式之外,我会选择:光标位于“alimony”某处,按E跳转到同级元素的末尾,然后按a<CR><ESC>(追加换行符),然后重复执行E.(结束元素,重复插入换行符)。 - cfrick
2个回答

1

这是一个老问题,但也许更新的答案会帮助未来到这里的人。

你不必像Kaz提到的那样编写程序。其他人已经做过了。我没有尝试过它们,但以下是一些: fipp, cljfmt, cljstyle, zprint, joker。(最后一个不仅仅是代码格式化。)

正如Kaz所建议的那样,一旦安装,您可以使用!将代码管道传输给格式化程序。您甚至可以将此操作绑定到键组合。一些格式化程序提供有关如何执行此类操作的建议。

此外,一些vim IDE插件(例如vim-iced)提供支持使用外部格式化程序。


0
一个高效的方法是,不用与Vim模块和扩展斗争,而是编写一个Lisp程序,它可以读取S表达式并以所需的方式重新格式化输出它们。要在Vim外部使用该程序,只需使用命令将一系列行传递给它即可。

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