gpt4 book ai didi

vim - 如何在 Vim 中为换行符定义异常?

转载 作者:行者123 更新时间:2023-12-04 19:20:23 24 4
gpt4 key购买 nike

我在 Vim 中编辑文件是我记录终端命令行以及我所做的事情的描述。
我所有的命令行都以 $ 开头,所以我的文件如下所示:

This is a description of what this
command does, it can be quite long and
should have line breaks.

$ ./the_command.sh


这些实际上是 Viki文件,但我想这个问题应该适用于任何文件类型。我打开了文件类型检测并且文件被正确识别。

现在的问题是:

我希望将(硬)换行符插入到除命令行的实际副本之外的所有文本中,命令行的实际副本可以通过前导 $ 轻松识别。

是否可以在 Vim 中定义基于模式应用换行规则的异常(exception)?我会在 viki 文件的语法文件中这样做吗?

更新
结合使用 Herbert 和 Jefromi 的建议,我现在在我的 .vimrc 中有这个:
au CursorMovedI *.viki call SetTextWidth()

function! SetTextWidth()
if getline(".")=~'^\$'
set textwidth=1000
else
set textwidth=80
endif
endfunction

它正是我想要的。谢谢你们!

最佳答案

我收集当你说你想要“硬换行”时,你的意思是你想让 Vim 自动换行,当它到达 textwidth 列时。我认为,最好的方法是定义一个“au”命令,当它位于以“$”开头的行上时,将 textwidth 设置为一个较高的数字(高于可能的最长行)。

因此,每当您在一行上进入或退出插入模式时,这样的事情都会改变 textwidth :

au InsertEnter call SetTextWidth()
au InsertLeave call SetTextWidth()

function! SetTextWidth()
if getline(line('.')) =~ '^\$'
" [edit: 'set textwidth = 0' is preferable to line below]
set textwidth =1000
else
set textwidth=78
endif
endfunction

您可能希望使用 CursorMoved/CursorMovedI 组而不是 InsertEnter/Leave,因为它们的粒度更细。每当您移动光标时,它们就会被触发,因此该函数最终会被调用更多次,但函数足够简单,它可能不会导致任何明显的性能下降。

对于完全没有函数的情况,您可能可以使用这样的方法:
au InsertEnter exec "set tw=" . getline(line('.'))=~'^\$' ? 1000 : 78
au InsertLeave exec "set tw=" . getline(line('.'))=~'^\$' ? 1000 : 78

关于vim - 如何在 Vim 中为换行符定义异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4144160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com