すでにスワップファイルがある場合は、VIMで読み取り専用モードでファイルを開くにはどうすればよいですか?

すでにスワップファイルがある場合は、VIMで読み取り専用モードでファイルを開くにはどうすればよいですか?

コマンドを使用してファイルを開くときに、:e filenameそのファイルが別のvimインスタンスによってすでに開かれている場合は、次の場所でファイルを開くかどうかを尋ねられます。読み取り専用モードしかし、編集、再開、終了、または中止されました。

vimを試すと停止:silent! e filenameするようです。しかし、スワップファイルで何をすべきかを尋ねる質問がありますが、静かにするように言うことはできません。

ファイルを開くように指示するために使用できるコマンドはありますか?読み取り専用モード もしファイルを書き込みモードで開くことができず、ユーザーの対話は必要ありませんか? (ファイルをジャンプ/開くためにこれをマクロに統合したい)

答え1

お持ちの場合精力>= 7(私の考えでは)autocmdイベントと一緒に使用できますSwapExists。そこでは、非常に単純なものから非常に複雑なものまで何でもできます。
以下は ~/.vimrc の簡単な例です。

autocmd SwapExists * let v:swapchoice = "o"

スワップファイルが存在すると、このイベントが発生します。上記のautocmdは読み取り専用モードでのみファイルを開きます。 autocmdから値を取得すると
v:swapchoiceいいえ何をしたいのか尋ねてください。使用できる値はここにリストされています。v: 交換の選択
非常に高度なautocmdについては、ここを参照してください:既存の.vimの編集
vimをインストールした後、スクリプトがサーバーにすでに存在する可能性があるためeditexisting.vim

答え2

正確にこれを行うスクリプトがあります.vimrc。ただし、swpファイルを含む開いているすべてのファイルに対してこれを行います。常にこの動作をしたいかどうかはわかりません。おそらく、作成中のマクロで必要に応じて調整できます。

swpファイルがある場合はroを開くには、次のように入力します.vimrc

func CheckSwap()
  swapname
  if v:statusmsg =~ '\.sw[^p]$'
    set ro
  endif
endfunc

if &swf
  set shm+=A
  au BufReadPre * call CheckSwap()
endif

ここからこのスクリプトを入手しました。ここ、そして興味を持つことができる高度な例です。

答え3

RHELとUbuntuのコマンドはviewvimを読み取り専用モードで開きますが:w!

関連情報