在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 ... 

Vim这样做很简单(在单词边界上划线)。

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

我build议你看看:help gq:help gw

同时设置textwidth( tw )会使您在input时超出自动换行。 它也用于gq ,虽然如果禁用gq断开窗口大小或79取决于首先。

 :set tw=80 

通过设置格式选项来包含文本宽度,vim会自动在tw设置中断开。

 :set fo+=t 

首先设置你的vim,以便明白你需要80个字符:

 :set tw=80 

那么,希望线:

 V 

并让vim重新格式化它:

 gq 

这和VIM没有什么关系,但是你可以使用fmt程序

 $ fmt myfile 

如果你在* nix你可能有fold可用。

使用vselect你想要的区域,然后你可以使用下面的宽度为80的空格:

!fold --spaces --width=80

这与使用gq相同。

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

!fold --width=80

如果你想要一个按键,只需设置一个映射 – 我已经使用了

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

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

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

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

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

作为一个快速和讨厌,也许尝试下面的地图:

 map q 080lwbels<CR><ESC> 

其中说:

  • 开始排队的第0个位置,
  • 移至第80个字符右侧,
  • 去下一个词的开头,
  • 回到前面的话,
  • 去当前字的结尾,
  • 去一个字右键,然后
  • 用一个CR代替那个char。

然后打q和CR会把字段划分成单词边界上的块。

对于实线文本,请在正常模式下高亮显示使用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