Notepad++ 或 Vim 文档换行或文本文件换行

Notepad++ 或 Vim 文档换行或文本文件换行

这听起来可能有点奇怪,请忍耐一下。我不是寻找常规的自动换行,我已经知道如何切换。

在 Notepad++ 中是否有可能进行“文档换行”或“文本换行”?例如,想象一个包含三行长行(行号在开头)的文本文件:

1 A 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii jjjjjjjjj kkkkkkkkk
2 B 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii jjjjjjjjj kkkkkkkkk
3 C 111111111 222222222 333333333 444444444 555555555 666666666 777777777 888888888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee fffffffff ggggggggg hhhhhhhhh iiiiiiiii jjjjjjjjj kkkkkkkkk

“文档包装”版本如下所示:

1 A 111111111 222222222 333333333 444444444 555555555 666666666 777777777 8888
2 B 111111111 222222222 333333333 444444444 555555555 666666666 777777777 8888
3 C 111111111 222222222 333333333 444444444 555555555 666666666 777777777 8888
<wrapped>
1 88888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee 
2 88888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee 
3 88888 999999999 000000000 aaaaaaaaa bbbbbbbbb ccccccccc ddddddddd eeeeeeeee 
<wrapped>
1 fffffffff ggggggggg hhhhhhhhh iiiiiiiii jjjjjjjjj kkkkkkkkk
2 fffffffff ggggggggg hhhhhhhhh iiiiiiiii jjjjjjjjj kkkkkkkkk
3 fffffffff ggggggggg hhhhhhhhh iiiiiiiii jjjjjjjjj kkkkkkkkk

最好的办法是让 Notepad++ 自动执行并撤消该操作(类似于自动换行切换)。但是,我们也可以使用永久修改文件内容的解决方案 - 也许使用正则表达式来剪切超过列数的多余行,然后将其粘贴到文件底部。

如果有的话,我也可以尝试一个vim功能。

答案1

在您的vimrc,然后按F12使用。u按 撤消更改。

nmap <F12> :call FileWrapOuter()<CR>

function! FileWrapOuter()
    while FileWrap()
    endwhile
endfunction

function! FileWrap()
    " Go to end of file and set mark 'a'.
    norm G
    norm ma
    let w:madeChange = 0
    " Call FileWrapInner() for each long line.
    :%g/.\{80\}/call FileWrapInner()
    if w:madeChange
        " Return to mark 'a' and add <wrapped>.
        norm 'a
        norm o<wrapped>
        return 1
    endif
    return 0
endfunction

function! FileWrapInner()
    " Copy current line into 't' buffer.
    norm "tyy
    " Delete anything in line after 79th character.
    norm 0
    norm 79l
    norm d$
    " Paste 't' buffer at end of file.
    norm G
    norm "tp
    " Delete first 79 characters.
    norm 0
    norm 79x
    let w:madeChange = 1
endfunction

假设最大宽度为 79 个字符。如需其他数量,请更改上述函数中的80和的出现次数。79

相关内容