.vimrc 中的 auto chmod 行出现故障

.vimrc 中的 auto chmod 行出现故障

.vimrc我找到了对我的文件有用的行这里#!当我保存它时,这使得任何以第 1 行开头的文件都可执行。这是该行:

au BufWritePost * if getline(1) =~ "^#!" | silent !chmod +x <afile> | endif

只要我没有任何语法错误,这就很好用。但是如果我尝试保存一个有任何语法错误的文件,如果它在第 1 行有一个 shebang 行,那么当我保存时 vim 就会出现故障。当我注释掉这一行时,这种行为就完全消失了。我不太了解 vim 的内部工作原理,无法诊断这个问题。为什么会造成故障?有什么办法可以让这更加万无一失,还是我应该完全放弃这条线?

编辑:更具体地说,问题仅在我使用:w并继续编辑时发生,而不是在我使用:wq或时发生:x。屏幕底部出现的一两行错误消息似乎在弹出时会将屏幕向上移动一两行。

编辑2:我也刚刚从同一网页尝试了其他解决方案:

function! SetExecutableBit()
  let fname = expand("%:p")
  checktime
  execute "au FileChangedShell " . fname . " :echo"
  silent !chmod a+x %
  checktime
  execute "au! FileChangedShell " . fname
endfunction
command! Xbit call SetExecutableBit()

这使得我可以:Xbit在 vim 中使用它来添加 x 位。这确实成功添加了 x 位,但无论我是否有语法错误,它都会完全清除我的终端屏幕(包括行号),除了我的光标和底部的 vim 命令行。

相关内容