在VIM中,如何将一条很长的线分成多条线?

时间:2009-08-13 14:06:18

标签: vim

假设我在VIM编辑器中有超长行(比如大约300多个字符)。我如何将其分成多行,以便单词边界大致突破80个字符?

示例:

This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line This is a really long line

This is a really long line 
This is a really long line
This is a really long line
This is a really long line
This is a really long line
This is a ...

11 个答案:

答案 0 :(得分:233)

Vim非常容易(在单词边界处断行)。

gq{motion} % format the line that {motion} moves over
{Visual}gq % format the visually selected area
gqq        % format the current line
...

我建议您查看:help gq:help gw

另外,设置textwidth(tw)会在打字时超出时自动换行。它也在gq中使用,但是如果禁用gq则会在窗口大小上打破,或者79取决于哪个会先出现。

:set tw=80

通过设置格式选项以包含文字宽度,vim将在tw设置下自动中断。

:set fo+=t

答案 1 :(得分:79)

首先设置你的vim,使它理解你想要80个字符:

:set tw=80

然后,hilight the line:

V

并让vim重新格式化:

gq

答案 2 :(得分:17)

这与VIM无关,但您可以使用 fmt 程序,如

$ fmt myfile

答案 3 :(得分:10)

对于实线文本,在正常模式下使用v突出显示区域,然后按

:s/\v(.{80})/\1\r/g

这将在每个第80个字符的末尾添加换行符。

:s/       replaces within the current select
\v        uses regular expressions
(.{80})   selects 80 characters & placed them into group one
\1\r      replaces group one with group one and a newline

答案 4 :(得分:6)

如果你在* nix上,你可能有fold

使用v选择您想要的区域,然后您可以使用以下方法中断宽度为80的空格:

!fold --spaces --width=80

这与使用gq完全相同。

但是,如果你只是想在80字符处打破而不限于你可以使用的空格:

!fold --width=80

如果你只需要一次按键就可以设置映射 - 我已经使用了

vmap <f1> !fold --width=80<CR>

答案 5 :(得分:4)

我需要重新格式化整个文件而不是一行。正如Wernsey指出的那样,我可以使用'fmt',但vim中的以下序列也可以解决这个问题(借用这里的各种答案):

<ESC>
:setl tw=80 fo=t
1GVGgq

答案 6 :(得分:3)

快速而讨厌,也许可以尝试以下地图:

map q 080lwbels<CR><ESC>

说:

  • 开始第0行,
  • 向右移动到第80个字符,
  • 转到下一个单词的开头,
  • 回到上一个词,
  • 转到当前单词的结尾,
  • 右边一个字符,
  • 用CR代替该字符。

然后点击q和CR会将这一行分成单词边界上的块。

答案 7 :(得分:3)

要在整个文档中拆分长行而不删除已存在的换行符,请使用:

:set formatoptions+=w
:set tw=80
gggqG

答案 8 :(得分:0)

我在最后一个空格之后但在80列之前,在每个LONGLINE中手动插入了“ \”(然后使用CR /制表符进行格式化)。也就是说:

1 this is a long, long, line

现在看起来像

1 this is a long, \
        long line

并正常编译。

答案 9 :(得分:0)

fmt在VIM中也可以很好地工作,并且将进行如下更改:

md5:A55B4EEB6FC24B2377A31A37C490D236 | sha1:BB4E344C5F271BF8B76B3FDC626A26627E97F453 | sha256:7A386ADBBF9CE26E892F044128F21C70B13695CE7931456C12868776BC680582 | sha512:DECB7B5B66FA5A272FDAB5​​6CD4B6639CA216B30418E050C16A3821FE2FBF9B90C3DC35671AED44B0AE8C5471FCD6393D4955237E1497DF2CA2B427615FEE7B32

为了更有利 哈希:

|

它将哈希的类型,哈希数和管道依次放在各自的行上...

只需在视觉上选择所需的文本,然后:

!fmt -1

答案 10 :(得分:-1)

我手动将长行折断。我认为要点是按“ r”(正常模式)然后按。

这将删除光标所在的字符。因此,请记住在要换行的单词之前的空格处执行此操作,否则您将不得不插入丢失的字符。

我只是不知道如何折行并将其下移2行空间,以便在2行之间留出空间。