VIM:在vsplit中自动打开单独的帮助/提示/文本文件

时间:2015-02-09 09:55:34

标签: vim

我有以下问题,或者说有想法,与vim。当我写乳胶文档时,我想自动打开一个文件~/.vim/latex_hints,我在右侧的 vsplit 中收集了一些提示,快捷方式,解决方法......提示文件应该只读加载,并在关闭乳胶文档时自动关闭。

经过几次实验后,我将以下命令添加到我的vimrc中:

function Handletexfile()
    setlocal cc=80
    setlocal wrap
    setlocal textwidth=80
    belowright vsplit +setl\ ro\ nomodifiable ~/.vim/latex_hints 
endfunction 

autocmd BufRead,BufNewFile *.tex  call Handletexfile() 

function Handletexfileexit() 
    let tablist = []                                            
    call extend(tablist, tabpagebuflist(tabpagenr()))          
    for b in tablist 
            echo b . " ". bufname(b)
            if bufname(b) =~ "vim/.*_hints" 
                     echo "Close buffer..". b  
                     execute "bdelete! ".b
            endif 
    endfor 
endfunction 
autocmd BufWinLeave *.* call Handletexfileexit()

当我打开tex文件时,我的提示文件在右侧显示为只读且不可修改。但是当我使用:q:wq关闭时,会列出当前选项卡中打开的缓冲区,并且if语句会选择与提示文件匹配的缓冲区。但我得到以下输出

1 abstract.tex
2 ~/.vim/latex_hints
Close buffer..2

我的vim因为段错而崩溃了。

2 个答案:

答案 0 :(得分:1)

您的要求的第一部分非常简单地转换为Vimscript:

autocmd BufWinEnter <buffer> belowright vsplit +setl\ ro ~/.vim/latex_hints

将其放入~/.vim/after/ftplugin/tex.vim,或将:autocmd FileType tex添加到上述命令中。

后一部分更复杂;在BufWinLeave上,您必须使用bufwinnr()检查已打开的作弊文件的所有其他窗口,转到它(:wincmd w)和:close。< / p>

答案 1 :(得分:0)

作为替代方法,请使用预览窗口和提示文件。预览窗口为您提供了一些优势:

  • 它很小而且不碍事。
  • 可以通过<c-w>z从任何其他窗口轻松关闭它
  • 可以通过<c-w>P轻松从任意窗口跳转到预览窗口(通过<c-w>p跳回来)

您可以通过:pedit命令执行此操作。例如:

autocmd BufWinEnter <buffer> pedit +setl\ ro ~/.vim/latex_hints

就个人而言,我觉得创建命令或映射以打开提示文件会更好,因为随着时间的推移,最终可能会增加文件。我还要将'bufhidden'设置为wipe并使用'nobuflisted'取消列出缓冲区。

您可能还希望了解一个不错的snippet plugin