在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
可用。
使用v
select你想要的区域,然后你可以使用下面的宽度为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