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

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

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

还有更好的方法来解决这个问题吗?更好的运动键?某种“假包装”(文本的行为就像w,但文件中没有/一样),还是其他?“

评论

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

#1 楼

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

也许您可以重新绑定箭头键: br />
或者有些人也直接将k和j重新绑定:

nnoremap <Up> gk
nnoremap <Down> gj


对于插入模式,可以使用:
nnoremap k gk
nnoremap j gj


或:

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



另外,如果使用:set wrap,Vim会换行,因此您可以看到所有的线。您还可以使用set showsbreak=+来显示+,以指示Vim正在包装。命令。例如,200 |将转到列位置200。

评论


...和g5j一样往下跳5。

–吗?
2015年2月3日,18:53

@yo'我想你是说5gj

–马丁·图尔诺伊(Martin Tournoij)
2015年2月5日在17:23

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

–吗?
2015年2月6日,9:50

@yo',好吧,在g5j中,首先看到g5,在应用j之前,它会跳到下一个5。这就是为什么它无法执行5gj的原因。

– Shahbaz
2015年3月2日14:17

nnoremap命令在“普通”模式下起作用,但在“插入”模式下,inoremap命令不起作用。有什么线索吗?

–路易斯·德·索萨(Luísde Sousa)
20年5月2日在16:49

#2 楼

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

#3 楼

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

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

#4 楼

正如其他人所说的,您可以使用g +来移动。
但是,当行很长时,多次按gj向下移动并不符合人体工程学。我在.vimrc中添加了以下内容,以简化操作:通过按住Command键来排成一行。在其他系统上,您可以尝试使用DM代替Alt或A代替Control代替C