Vim-如果文件包含特定字符串,则防止保存/写入文件

Vim-如果文件包含特定字符串,则防止保存/写入文件,vim,Vim,我想阻止Vim保存包含以下文本的文件 :style=> 这可能位于文件中的多个位置 作为奖励,如果它能出现一条错误消息,如“停止将样式内联!”那也太好了;) 谢谢 PS:我希望在尝试写入文件时触发此阻止操作:w单向 要执行此操作,请将save(:w)命令“绑定”到检查模式的函数: autocmd BufWriteCmd * call CheckWrite() 您的Check()函数可能如下所示: function! CheckWrite() let contents=getline

我想阻止Vim保存包含以下文本的文件

:style=>
这可能位于文件中的多个位置

作为奖励,如果它能出现一条错误消息,如“停止将样式内联!”那也太好了;)

谢谢

PS:我希望在尝试写入文件时触发此阻止操作:w

单向 要执行此操作,请将save(
:w
)命令“绑定”到检查模式的函数:

autocmd BufWriteCmd * call CheckWrite()
您的
Check()
函数可能如下所示:

function! CheckWrite()
  let contents=getline(1,"$")
  if match(contents,":style=>") >= 0
    echohl WarningMsg | echo "stop putting styles inline!" | echohl None
  else
    call writefile(contents, bufname("%"))
    set nomodified
  endif
endfunction
注意,在这种情况下,您必须自己提供一个“保存文件”机制(这可能不是一个好主意,但效果很好)


更安全的方法 当模式出现时,将设置为只读:

autocmd InsertLeave * call CheckRO()
并在尝试保存时发出警告:

autocmd BufWritePre * call Warnme()
其中
CheckRO()
Warnme()
类似于:

function! CheckRO()
  if match(getline(1,"$"),":style=>") >= 0
    set ro
  else
    set noro
  endif
endfunction
function! Warnme()
  if match(getline(1,"$"),":style=>") >= 0
    echohl WarningMsg | echo "stop putting styles inline!" | echohl None
  endif
endfunction

突出 使用
hi
+
语法匹配
命令突出显示您的模式可能也是一个好主意:

syntax match STOPPER /:style=>/
hi STOPPER ctermbg=red


最后,看一看。

通过VCS的提交钩子强制执行这样的限制可能更为典型。例如,请参见


这将保留编辑器的功能,同时禁止提交有问题的代码。

使用
BufWritePre
而不是
InsertLeave
。true。这是解决问题的一种方法。我只是想要更直接一点的东西。我想我可以在VIM中设置一些简单的东西来帮助您。