如何在vim中启用自动换行时防止在引号中包装字符串?

时间:2016-12-18 17:44:46

标签: vim vi

我倾向于启用自动换行:

:set textwidth=80
:set formatoptions+=wt

但是当我用C或javascript编码时,当我在引号中输入一个长字符串时,我不想换行,因为它会出错; 我可以配置我的vim自动换行排除引号吗? 或者在包装此行之前自动输入'\'?

2 个答案:

答案 0 :(得分:0)

您可以从我编写的这个小脚本开始,添加一些改进以满足您的需求:

"""""the event that will trigger the wrap (leaving insert mode)
au InsertLeave * call WrapLines()
"""""highlight the column where the wrapping will be made
set colorcolumn=30
"""""WrapLines will be executed on lines
function! WrapLines()
execute ":%g/^/ call WrapFunction()"
endfunction

"""""check and wrap the line
function! WrapFunction()
    let l:line=getline(".")
    let l:length=strlen(l:line)
    let l:occurence=0
    let l:i=0
    let l:nb=30
    for l:i in split(l:line,'\zs')
        if matchstr(l:i,'"') != ''
            let l:occurence+=1
    let l:occurence=l:occurence % 2
        endif

   let l:nb-=1
if l:nb == 0
break
endif
    endfor
    if l:length >= 30
        if l:occurence == 0
"""""to get ^M you need to type <ctrl-v><enter> buttons
            normal! 30|i^M
        endif
    endif
endfunction

注意: 要获取代码中的^M,请输入 ctrl + v 输入

命名并保存文件 ex script.vim,然后通过“:source script.vim”命令将其调用

以下是示例:( 30 字符 - 限制 - ):

enter image description here

答案 1 :(得分:-1)

您的设置是通过添加回车来包装线条,这会在编译时导致问题。

相反,您可以使用{{1>}选项虚拟换行并且不会影响这些行:

wrap