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

在VIM中,如何将一条很长的线分解为多条线?,vim,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

假设我在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


作为一个快速而恶劣的例子,可以尝试以下地图:

map q 080lwbels<CR><ESC>
映射q 080LWBEL
上面说:

  • 开始生产线的第0个位置
  • 移到右边的第80个字符
  • 转到下一个单词的开头
  • 回到前一句话
  • 转到当前单词的末尾
  • 向右走一个字符,然后
  • 用CR代替那个字符

然后点击q和CR将在单词边界上将行分成块。

这与VIM没有真正的关系,但您可以使用fmt程序,如中所示

$ fmt myfile
Vim很容易做到这一点(在单词边界处断线)

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

另外,设置textwidth(
tw
)将使您在键入时自动换行。它也在
gq
中使用,但如果禁用
gq
会根据窗口大小或窗口大小而中断,具体取决于哪个先到

:set tw=80
通过设置包含文本宽度的格式选项,vim将在tw设置时自动中断

:set fo+=t

首先设置vim,使其了解您需要80个字符:

:set tw=80
然后,点亮线路:

V
并使vim重新格式化:

gq

我需要重新格式化整个文件,而不是一行。正如Wernsey所指出的,我本可以使用“fmt”,但vim中的以下序列也起到了作用(借用了这里的各种答案):


:setl tw=80 fo=t
1GVGgq

如果您在*nix上,您可能有可用的
折叠

使用
v
选择所需区域,然后可以使用以下方法在宽度为80的空格上打断:

!折叠--空格--宽度=80

这与使用
gq
基本相同

但是,如果您只想在字符80处中断,而不限于空格,则可以使用:

!折叠--宽度=80

如果你只需要一次按键,只需要设置一个映射-我已经用过了


vmap!fold--width=80

要在不删除已存在的换行符的情况下拆分完整文档中的长行,请使用:

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

对于实线文本,在正常模式下使用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
我手动将“\”(然后使用CR/tab进行格式化)插入到最后一个空格之后、80列之前的每条延长线中。也就是说:

1 this is a long, long, line
现在看来

1 this is a long, \
        long line

并且可以正常编译。

fmt在VIM中也可以很好地工作,并将改变如下内容:

md5:A55B4EEB6FC24B2377A31A37C490D236 | sha1:BB4E344C5F271BF8B76B3FDC626A26627E97F453 | sha256:7A386ADBBF9CE26E892F044128F21C70B13695CE7931456C128776BC6880582 | sha512:DECB7B5B666FA5A272FDAB56CDB6639CA216B30418C13821FE2BF9B90DC351ED44B136957CE798CD497B457B437332

更有利 散列:

|

它将把散列类型、散列号和管道依次放在各自的行上

只需直观地选择所需的文本,然后:


!fmt-1

我在适当的位置手动分解长线。我想主要是按“r”(正常模式),然后按

这将使删除光标所在的字符。因此,请记住在要换行的单词前的空格处执行此操作,否则必须插入缺少的字符

: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

我只是不知道如何将这条线打断,并将其向下移动两行空间,以便两行之间有空间。

:%!fmt%“可以使其与vim相关:)对vi有用,但我更喜欢vim上的gqq。因此,对于您的情况,
gq
命令将是
(退出插入/替换/etc模式),然后
gq80l
这与Ctrl+j相反(将多行组合成一行).Vim从未停止让我惊讶。这是纯金的。对于下一个找到它的人来说,gq只是不会分割一行纯文本,它需要空白来完成它的工作[runs
gqq
]aaaahhh,这很漂亮这是一个适用于长字符串而不是空格分隔的答案。在macOS上,您可能需要使用gfold而不是fold。在mac os上,我不得不这么做!fold-w 80这是唯一适用于长base64字符串的解决方案。
1 this is a long, long, line
1 this is a long, \
        long line