如何处理文本中很长的行(超过500个字符)?


19

对于某些文本格式,换行很重要。

例如,我经常使用Vim编写MediaWiki文档,而不能在其中将换行符放在任何地方(与Markdown不同)。所以我被迫写很多字符的行。

这可能导致较长的行(超过200个字符),甚至可能导致非常长的行(超过1000个字符)。我觉得在Vim中使用它很尴尬。一个示例是,如果我想在1000个字符行的中间进行编辑,则需要将光标移动500次。

使用w或可以使速度更快一些/,但还是很尴尬。

有更好的方法来解决这个问题吗?更好的运动键?某种“假包装”(文本的行为就像tw=80,但\n在文件中没有)还是其他某种方式?


1
您可能还需要设置display = lastline以避免在屏幕末尾出现空白@行。
Random832

Answers:


21

您可以使用g一系列命令移至可见屏幕区域的边界。例如,g$移到屏幕的右边缘(不一定是行的结尾)。 gj将光标向下移动到屏幕上显示的一行(不一定向下逻辑一行)。

也许您可以重新绑定箭头键:

nnoremap <Up> gk
nnoremap <Down> gj

或者有些人也直接重新绑定kj

nnoremap k gk
nnoremap j gj

对于插入模式,可以使用:

inoremap <C-k> <C-o>gk
inoremap <C-j> <C-o>gj

要么:

inoremap <Up> <C-o>gk
inoremap <Down> <C-o>gj

另外,如果使用:set wrap,Vim将自动换行,因此您可以看到所有行。您也可以使用set showsbreak=+显示+来表示Vim正在包装。


要跳转到特定的列位置,可以使用|命令。例如,200|将转到列位置200。


1
...然后g5j像往常一样跳下5。
哟,

1
@yo'我想你的意思是5gj
马丁·图尔诺伊

1
@Carpetsmoker奇怪;对于大多数命令,只要命令本身是最后一个,则给出前缀和数字的顺序都无关紧要。在这里它不是:-/

好吧g5jg5首先看到@yo',5在应用之前,它会跳到下一个j。这就是为什么它不能做什么5gj
Shahbaz

3

Vim支持软包装,只需set wrap启用它即可,它将包装超出可见屏幕的长行。您可以使用gjgk分别在此类换行线上上/下移动。


2

当我处理很长的线时,最大的痛点是与不同的线长有关。也就是说,在行尾附近向上或向下移动可使窗口向左或向右滚动。

可以通过设置来避免这种情况virtualedit=all,该设置允许您将光标移动到行尾之后很长时间。


1

正如其他人所说,您可以使用g+来移动。但是,当您的行非常长时,gj多次按向下移动并不符合人体工程学。.vimrc为了方便起见,我准备了以下内容:

vmap <D-j> gj
vmap <D-k> gk
vmap <D-4> g$
vmap <D-6> g^
vmap <D-0> g^
nmap <D-j> gj
nmap <D-k> gk
nmap <D-4> g$
nmap <D-6> g^
nmap <D-0> g^

在Mac上,通过按住Command键,可以在显示行上使用j,k,$,0和^。在其他系统上,而不是D你可以尝试MA为Alt键,或C用于控制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.