Answers:
可以将gq
或gw
运算符与运动命令结合使用。默认情况下,它使用fmt
程序(在Linux中)格式化给定的文本。但是,据我所知,它不能使线条合理,因此您将获得边缘不整齐的空白。
我使用它的方式是gwip
将光标放在段落上(正常模式)。这将格式化当前段落,使光标保持在同一位置。我用这种方式来确保仅格式化当前段落。编辑文本文件时,gwG
在文件开始处发出(普通模式)将格式化整个文本。作为一种好习惯,请确保在段落之间至少留出一个空白行。
有很多可以完成的配置。首先,这里有一些相关的帮助::h gq
,:h gw
,:h fo
(格式选项), :h fp
(格式化程序), :h fo-table
(可能的选项的说明)。
'formatprg'
选项来选择使用一个外部程序。
这个主题上有很棒的VimCast。
http://vimcasts.org/episodes/formatting-text-with-par/
基本上,您需要安装par
:
$ brew install par
# or
$ sudo apt-get install par
然后,由于您希望将列包装为80列:
:set formatprg=par\ -w80
现在,您可以gq
像其他答案(例如gqip
)一样使用运算符,它将使用Par代替Vim的内置格式化程序。
Par非常高级,它将很好地格式化注释:
/* This is a long */
/* multiline comment */
来自: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
.vimrc,这样就不必每次都键入它。)
注:这并不能添加换行符为您服务。您必须使用手动添加gq
。为此,您还必须通过以下方式将textwidth
(默认值为0)设置为所需的值
set textwidth=80
以及(如果需要)通过设置t
-flag通过
set formatoptions+=t
如果需要,可以在.vimrc中设置一个映射来为您完成整个操作:
nnoremap <C-j> gggqG_j
这将移至文件(gg
)的开头,包装所有行(gq
直到G
),然后_j
修饰文本。
_j
宏添加的映射似乎为我证明了整个文件的合理性,或者可以通过逐行视觉选择来限制它。
虽然nano的帮助将^J
命令称为“ Justify”,但实际上并不能证明文本的合理性,它会重新格式化文本,以在屏幕右边界(或我认为在某些可配置的列)之前的行前打断行。
您可以通过textwidth
从:help 'textwidth'
以下位置设置变量在VIM中执行相同的操作:
所插入文字的最大宽度。空格后,较长的线将被折断以获得该宽度。零值将禁用此功能。
也就是说:在键入时,如果一行比textwidth
字符长,VIM将在第一行换行以使行长小于或等于textwidth
。
为此,该选项formatoptions
必须包含字母t
。请参阅:help 'formatoptions'
和:help fo-table
中的可用选项,例如,您可能c
对使格式化与注释一起使用的选项感兴趣。
编辑:您可以执行相同的操作,而不需要把t
在formatoptions
使用命令gw{motion}
,它格式化当前光标位置和之后的光标位置之间的文本{motion}
。该gw
命令在可视模式下也可用,它格式化选定的文本。
这是两个简单的选项:
!fmt
!}fmt
两者都向unix发送了一段文本fmt
,请参见man fmt
选项。您可以从vim传递选项参数。例如,要格式化50个字符宽的块,请键入!}fmt -w 50
。
:%!fmt
和单个撤消来格式化整个文件u
。