我正在尝试为我的.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=4
,scroll=4
仍然被覆盖。
如果我手动重新加载 .vimrc 文件:
:so ~.vimrc
然后滚动设置有效。
显然,解决方案是将scroll
配置为~/.vimrc
中的所需值。 但是,使用set scroll=n
的问题在于,每当当前窗口大小更改时,该值都会重置为0
,例如,使用:h scroll
打开内置帮助时,或使用q/
浏览搜索历史记录时。
为了在所有窗口中保留scroll
设置,并在所有窗口大小更改后,我在~/.vimrc
中实现了此 vimscript 代码,该代码在使用 Ctrl+D 和 Ctrl+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
,例如在关闭帮助窗口后。