Vim autocmd在readonly上错误运行

时间:2014-02-04 03:46:17

标签: vim

除此之外,我在.vimrc文件中还有以下内容:

function! BashHeader()
    source ~/.vim/bash_header.txt
endfunction

autocmd BufNewFile *.bash,*.sh :call BashHeader()

文件bash_header.txt在我的bash脚本文件的顶部只有一个我想要的样板标题。

乍一看,这很有用 - vim somefile没有标题,而vim somescript.bash会自动插入标题。当我使用启动模式快捷方式view时出现问题。 viewthis Vim documentation describes,是以只读模式启动Vim的快捷方式,如vim -R somefile。但是当我以这种方式启动Vim时,打开一个已经存在的文件,我得到以下消息:

$> view somefile
"somefile" "somefile" [readonly] 6L, 359C
Error detected while processing ~/.vim/bash_header.txt:
line    2:W10: Warning: Changing a readonly file
Press ENTER or type command to continue

请注意,我已使用~替换了.vim目录的实际路径;我不认为这是一个重要的遗漏。

显然,尽管存在事实

,Vim正试图在此文件中添加标题
  1. somefile已经存在(并且不应该触发我的autocmd所需的BufNewFile事件)和

  2. somefile甚至没有以.bash.sh结尾,因此不应触发autocmd所需的模式。

    < / LI>

    事实上,一旦按下回车键,我的bash标头就已插入到这个只读缓冲区中。

    为了使问题更加复杂,明确地以只读模式调用Vim,如vim -R somefile not 显示相同的错误行为。这与预期一样有效。

    我错过了什么?


    编辑:以下是bash_header.txt的内容:

    :insert
    #! /bin/bash
    #==============================================================================
    # $Author$
    # $Date$
    # $HeadURL$
    # $Revision$
    #==============================================================================
    .    
    

    此外,运行view -u NONE somefile不会出现错误。我有一个想法 - 也许我的.vimrc在使用view别名时没有被评估,但仅在使用vim时。作为一个简单的测试,我添加了

    echo ".vimrc was run."
    

    到我的.vimrc文件。 A-HA!当我运行vim somefile时,我会看到打印的消息,但是当我运行view somefile时却没有。所以现在我的问题变成了,vim使用.vimrc会导致view使用view而不是?那么,bash_header.txt如何抓住我的.vimrc,即使它似乎没有评估我的{{1}}?

1 个答案:

答案 0 :(得分:0)

请分享~/.vim/bash_header.txt

如果该文件实际上只包含样板文件,则不应使用:source,因为Vim将执行其内容,就像它是Vimscript一样。对于快速和肮脏的模板,您应该向我们:0r ~/.vim/bash_header.txt

另外,我无法在此处复制您的问题:autocmd执行view时未运行~/.vim/bash_header.txt。您应该将配置减少到其基本组件以优化您的问题:

  1. ~/.vimrc的内容是什么?
  2. 没有插件会发生什么?空{{1}}?
  3. 使用文件的确切路径。