tos*_*spo 5 vim file-type syntax-highlighting
我在Vim中编辑文件是我记录终端命令行以及我所做的描述.我的所有命令行都以$开头,所以我的文件看起来像这样:
Run Code Online (Sandbox Code Playgroud)This is a description of what this command does, it can be quite long and should have line breaks. $ ./the_command.sh
这些实际上是Viki文件,但我想这个问题应该适用于任何文件类型.我有文件类型检测,文件被正确识别.
现在的问题是:
我希望(硬)换行符插入到所有文本中,除了命令行的实际副本,这可以通过前导$轻松识别.
在Vim中是否可以根据模式定义应用换行规则的异常?我会在viki文件的语法文件中这样做吗?
更新使用Herbert和Jefromi建议的组合,我现在在.vimrc中有这个:
au CursorMovedI *.viki call SetTextWidth()
function! SetTextWidth()
if getline(".")=~'^\$'
set textwidth=1000
else
set textwidth=80
endif
endfunction
Run Code Online (Sandbox Code Playgroud)
它完全符合我的要求.多谢你们!
我认为当你说你想要“硬换行”时,你的意思是你希望 Vim 自动换行,就像当它到达 textwidth 列时一样。我认为,最好的方法是定义一个“au”命令,当它位于以“$”开头的行时,该命令将 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
Run Code Online (Sandbox Code Playgroud)
您可能想要使用 CursorMoved/CursorMovedI 组而不是 InsertEnter/Leave,因为它们的粒度更细。每当您移动光标时,它们就会被触发,因此该函数最终会被调用很多次,但函数足够简单,因此可能不会导致性能出现任何明显的下降。
对于完全没有函数的情况,你可能可以使用这样的东西:
au InsertEnter exec "set tw=" . getline(line('.'))=~'^\$' ? 1000 : 78
au InsertLeave exec "set tw=" . getline(line('.'))=~'^\$' ? 1000 : 78
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |