我曾经在Pico或Nano中而不是在Vim中编辑文本文件的唯一原因是其“ Justify”命令^ J。它将重新格式化文本的一段,在换行符处创建换行符,以便文本可以很好地浮动在固定宽度的屏幕上-格式化文本以适合预定义的80列,仅在换行符之间创建换行符。由于功能有限,无论是格式化冗长的注释块,文档文件,还是只是用更易读的内容替换无尽的参数行,它都非常有用。 ?

#1 楼

可以将gqgw运算符与运动命令结合使用。默认情况下,适用文本的格式设置是由Vim完成的,据我所知,它不会使各行对齐(您会得到空白的右边距)。另外,也可以使用外部程序(例如Linux上的fmt命令)通过使用formatprg设置进行指定来进行格式化。 。这将格式化当前段落,使光标保持在同一位置。我使用这种方式来确保仅格式化当前段落。编辑文本文件时,在文件开始处发出gwip(普通模式)将格式化整个文本。作为一种好习惯,请确保在段落之间至少保留一个空白行。
可以进行很多配置。首先,这里有一些相关帮助:gwG:h gq:h gw(格式选项),:h fo(格式程序),:h fp(可能选项的说明)。

评论


gq / gw绝对是必经之路。要添加到此消息,您可以更改格式程序以使其具有更多选项。结帐vimcasts.org/episodes/formatting-text-with-par

–班布
2015年2月6日在13:04

默认情况下,Vim不使用任何外部程序,尽管您可以通过设置'formatprg'选项选择使用一个外部程序。

–詹姆斯
2015年2月6日14:16

#2 楼

关于此主题,有一个很棒的VimCast。 :

$ brew install par
# or
$ sudo apt-get install par


然后,由于您希望将列包装成80列:您可以像其他答案一样使用par运算符(例如gq),它将使用Par代替Vim的内置格式器。 :

:set formatprg=par\ -w80


#3 楼

来自:help usr_25

JUSTIFYING TEXT                                                                 

Vim has no built-in way of justifying text.  However, there is a neat macro     
package that does the job.  To use this package, execute the following          
command:                                                                        

        :runtime macros/justify.vim                                             

This Vim script file defines a new visual command "_j".  To justify a block of  
text, highlight the text in Visual mode and then execute "_j".


因此,您所要做的就是运行

:ru macros/justify.vim


,然后键入

_j


来证明整个文件中的文本的正确性。不必每次都键入。)

注意:这不会为您添加换行符。您必须使用ru macros/justify.vim手动添加它们。为此,您还必须通过

set textwidth=80


,并且(如果需要)通过设置gq -flag自动进行自动换行,将textwidth(默认值为0)设置为所需值通过

set formatoptions+=t


如果需要,可以在.vimrc中设置一个映射来为您完成全部操作:

nnoremap <C-j> gggqG_j


这将移至文件的开头(t),包装所有行(gg直到gq),然后G修饰文本。

评论


有关格式的详细信息,请参见:VIM用户手册-编辑格式化的文本

– Suuuehgi
15年4月3日在19:38

我刚刚发现非常有用的:set fo + = a选项可以自动重新格式化整个段落。看看:help fo-table有其他选择。这里还有一个不错的视频教程。

– Suuuehgi
2015年4月4日在8:26



+1是一个完全内置的解决方案。宏添加的_j映射似乎为我证明了整个文件的合理性,或者可以通过逐行可视选择进行限制。

–ches
16-4-10的5:06

我发现的一个小缺点是_j尝试拉伸每条选定的行,包括段落的最后一行(通常不应拉伸)。我希望它遵守:set fo + = w所采用的惯例,并且只拉伸以空格结尾的线条。

–马兰
20 Nov 11'在12:06

#4 楼

尽管nano的帮助程序将^J命令称为“ Justify”,但实际上并不能证明文本的合理性,它会重新格式化文本,以在屏幕右边界之前(或在某些可配置的列处)打断行。

您可以通过从textwidth设置变量:help 'textwidth'在VIM中执行相同的操作:


要插入的最大文本宽度。
较长的行将在空格后断开以达到此宽度。零值将禁用此功能。



这就是说:键入时,如果一行的长度超过textwidth个字符,则VIM会将行换行以使行长度小于或等于textwidth。要执行此操作,选项formatoptions必须包含字母t。有关可用选项,请参见:help 'formatoptions':help fo-table,例如,您可能对c选项感兴趣,以使带注释的格式生效。 t,使用命令formatoptions格式化当前光标位置和gw{motion}之后的光标位置之间的文本。在可视模式下也可以使用{motion}命令,它会格式化选定的文本。

评论


这对打字很有好处。我可以将其应用于预先存在的文本吗?

– SF。
2015年2月6日在13:03

#5 楼

这是两个简单的选项:


选中一个文本块,然后键入!fmt

,将光标放在一个块的开头,键入!}fmt


这两者都向uniq fmt发送文本块,有关选项,请参见man fmt。您可以从vim传递选项参数。例如,要格式化50个字符宽的块,请键入!}fmt -w 50

评论


抱歉,现在修复

– kaan
2015年12月6日在2:23

您也可以输入:%!fmt格式化整个文件,如果您不喜欢此结果,请使用单个u撤消。

–通配符
15年12月21日在22:26

#6 楼

使用视觉命令标记文本,然后使用:

:!par 40j 


其中40是列宽,j表示对齐。

评论


欢迎来到我们的网站!您的问题当前质量低下,因为它缺少有关您正在使用的工具(标准)以及解决方案为何起作用的解释。您可能需要添加更多详细信息,以提高答案的质量并使之对将来的读者更有用。

–statox♦
18年3月29日在9:57