在Vim中滚动长包装行

在Vim中滚动长包装行,vim,Vim,问题:写散文时,使用j向下滚动时,滚动会以意外的方式工作。当我使用j在文本的两个长段落(vim中的换行)之间滚动时,当到达下一个长段落(行)时,文本从屏幕底部“跳”到顶部,将段落(行)的第一个单词与屏幕顶部对齐(参见下面的屏幕截图) 受影响的:喜欢Vim并想用它写散文的人 预期:我希望段落(行)跳转到屏幕中间或继续滚动,光标在底部。跳转太刺耳了——我正在失去上下文。两个问题:1)是否可以更改.vimrc中的默认行为2)如果不是,那么编写一个改变行为的插件的可行性如何 相关资源: 例如:

问题:写散文时,使用
j
向下滚动时,滚动会以意外的方式工作。当我使用
j
在文本的两个长段落(vim中的换行)之间滚动时,当到达下一个长段落(行)时,文本从屏幕底部“跳”到顶部,将段落(行)的第一个单词与屏幕顶部对齐(参见下面的屏幕截图)

受影响的:喜欢Vim并想用它写散文的人

预期:我希望段落(行)跳转到屏幕中间或继续滚动,光标在底部。跳转太刺耳了——我正在失去上下文。两个问题:1)是否可以更改.vimrc中的默认行为2)如果不是,那么编写一个改变行为的插件的可行性如何

相关资源

例如:这里我向下滚动一些虚拟文本:

jj
之后,下一段移到屏幕顶部:

我的,vimrc是。散文模式为:

command! Prose setlocal linebreak nolist wrap wrapmargin=0
nnoremap k gk
nnoremap j gj

这将有助于简要介绍VIM的运动命令
{
}
是具有文学文本的好命令。但是,如果您描述的不是段落,而是行。VIM将它们作为行进行管理。因此,您必须甚至重新映射
j
k
,这与通常情况相反。我的建议是通过
textwidth
将行分成段落

最后,VIM有屏幕命令来操作可视区域。由于VIM试图向您显示尽可能多的上下文(在您的情况下是一条非常长的线),因此它占据了整个屏幕,您可以看到“跳跃”来反转它,使用
zz
(又称
z
)命令移动屏幕可视区域以匹配中间的光标。其他的是
zt
将可视区域放置在顶部,以及
zb
将可行区域放置在底部


希望这些建议能对你有所帮助,祝你愉快。

正如@denten所提到的,它们不是段落,而是长长的一行

使用
j
k
导航时;在同一列中垂直移动。但是通过映射(
j
gj
k
gk
),您可以在编辑器的视觉包装下垂直移动

我建议删除该映射,并根据需要手动使用
gj
&
gk

另外,如果您需要滚动,请考虑映射<代码> PageUp < /代码> <代码> PageDown <代码>,内容如下:

" Slow PageUp/PageDown
nnoremap <silent> <PageUp> <c-y>
nnoremap <silent> <PageDown> <c-e>
“缓慢上/下翻页
nnoremap
nnoremap

或者,如果使用
PageUp
PageDown
的想法感到尴尬,请随意使用实际按键滚动:
Control
y
表示向上;而
Control
e
表示向下。

Vim本质上是一个基于行的编辑器。您正在使用
:set wrap
来显示整个长代码行。尽管如此,Vim仍然试图保持当前长行的开头可见(对于
:set number
)等功能,这将显示尽可能多的整行。行过长(占用大部分窗口,如屏幕截图中所示),这将导致当前行滚动到窗口顶部。恐怕没有什么可以阻止。您只能通过增加Vim窗口的大小,或通过在文本中使用硬换行符进行编辑来解决此问题。

不幸的是,这是Vim的问题之一。命令
gq
的存在可以帮助您解决此问题根据您设置的文本宽度填充文本,这可以节省一些时间。
se formatoptions+=a
很有帮助,因为它会在您编辑文本时重新格式化文本,因此您不必一直点击gq。当然,问题是,现在您必须用空行定义段落,如果需要进行搜索,这不是一个非常全面的解决方案由于某些其他原因(例如一行上有一个很长的json对象,或者日志文件或其他任何原因)而被屏蔽行删除

简单地看一下,当使用gnu GUI版本的emacs时,我似乎可以用鼠标滚轮按屏幕线条滚动。这与MacVim不同。因此看起来emacs至少对它有某种支持。如果你在写散文,你可能只需要emacs的邪恶模式插件就可以了,它不完整,但是一个pemacs内部的vim的retty复杂版本。一般来说,emacs对于真正喜欢修补和触摸系统的每个部分来做新事情的人来说更加灵活,因此可能有人为它编写了一些好的散文模式。不过,显然它不允许你利用现有的vim脚本


从您的链接来看,这个屏幕滚动问题似乎已经在Bram的雷达上出现了20年。我猜在现有系统中实现它有一些棘手的问题。这太糟糕了,因为当有人问这个问题时,人们不仅经常被想要什么弄糊涂,而且还有很多简单的原因你也会想要它。它很少出现在代码中,而且经常出现在其他类型的文档中。

这些不是真正的段落。它们是非常长的包装行。@FDinoff还有什么办法输入段落呢?@Jivan段落是由空白行分隔的文本块。碰巧图片中的行是941个字符长,前面有一个空行,后面有一个空行。因此,虽然是的,但它是一个段落。这是一个非常糟糕的段落。@OllieFord有很多换行符。您可以强制vim使用
set textwidth=80
gq
插入它们。我使用
/
进行基于键盘的滚动。O凯,那就别理他