Vim滚动设置被覆盖



我正在尝试为我的.tex文件应用以下设置:

set scroll=4

我已经把它放在我的~/.vimrc和我的~/.vim/ftplugin/tex.vim文件中。对于常规文件,这工作正常。对于.tex文件,将应用这些文件中的所有其他设置。但不是滚动设置。

注意:我安装了乳胶套件,这是我怀疑正在覆盖设置的原因。

当我打字时

:verbose set scroll

我得到:

  scroll=22
    Last set from ~/.vim/ftplugin/tex.vim

注意:22 是 gvim 窗口高度(行数(的一半。

如果我在编辑时获取~/.vim/ftplugin/tex.vim文件,滚动设置可以很好地应用,但我希望它在启动时与其他设置一起应用。

谢谢

更新:

感谢您的好建议。不过它还没有奏效。我看了看scriptnames,这是输出:

    62: /home/patrick/.vim/after/ftplugin/tex.vim
    63: /home/patrick/.vim/indent/tex.vim
    64: /usr/share/vim/vim72/syntax/bib.vim
    65: /home/patrick/.vim/ftplugin/bib_latexSuite.vim
    66: /home/patrick/.vim/after/ftplugin/bib.vim
    67: /usr/share/vim/vim72/indent/bib.vim
    68: /home/patrick/.vim/nerdtree_plugin/exec_menuitem.vim
    69: /home/patrick/.vim/nerdtree_plugin/fs_menu.vim

如您所见,我还在 after/ftplugin 目录中添加了一个 bib.vim 文件,因为我在启动时加载了 4 个选项卡,其中一个是 bib 文件。但是,它仍然不起作用。

更新 2

好吧,我仍然遇到同样的问题,但提供了更多信息。我现在正在运行 vim 的 Windows 版本。vim 声称卷轴最后一次设置是在 ~/.vimrc 年。但是每当每当

  • 我打开一个新选项卡(包含任何旧文件,因此 vimrc 设置应该仍然适用(
  • 我调整了 gvim 窗口的大小

因此,我不再认为这与乳胶套件或调用设置的顺序有任何关系。

我想出了一个修复/黑客。它可能与乳胶套件或所有这些无关。打开新选项卡或调整窗口大小时,它将被覆盖。快速解决方法是使用

noremap <C-u> 4<C-u>

因此,滚动时始终使用它。这也将scroll变量设置为 4,因此它也将应用于。

把你的tex.vim放在你的~/.vim/after/ftplugin目录中。有关详细信息,请参阅:help after

另请参阅 :scriptnames 的输出以检查 vim 加载所有脚本文件的顺序。

帕特里克重新映射答案绝对有效。每次调整 vim 大小时重置的另一个选项是使用另一个autocmd

  autocmd VimResized * :set scroll=10

尝试在 vimrc 文件中添加以下行:

autocmd FileType tex setlocal scroll=4

就我而言,滚动设置被 :set laststatus=2 命令覆盖。

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 27 2010 17:51:38)

即使我在 .vimrc 中:set laststatus=2之前或之后添加:set scroll=4scroll=4仍然被覆盖。



如果我手动重新加载 .vimrc 文件:

:so ~.vimrc

然后滚动设置有效。

显然,解决方案是将scroll配置为~/.vimrc中的所需值。 但是,使用set scroll=n的问题在于,每当当前窗口大小更改时,该值都会重置为0,例如,使用:h scroll打开内置帮助时,或使用q/浏览搜索历史记录时。

为了在所有窗口中保留scroll设置,并在所有窗口大小更改后,我在~/.vimrc中实现了此 vimscript 代码,该代码在使用 Ctrl+DCtrl+U 滚动时保持光标位置不变。当然,您可以轻松调整此代码以满足您的需求,只需将=1更改为 =4 ,例如:

set scroll=1
function! PreserveScroll(timer)
  set scroll=1
endfunction
augroup vimrc-preserve-scroll
  autocmd!
  autocmd VimResized * set scroll=1
  autocmd WinEnter   * set scroll=1
  autocmd WinLeave   * call timer_start(300, "PreserveScroll", {"repeat": 3})
augroup END

显然,设置计时器不是最好的解决方案,但不幸的是,我认为没有更好的方法可以在返回窗口时执行set scroll=n,例如在关闭帮助窗口后。

最新更新