Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

[vim] ZQでバックアップを取りながら終了する

$
0
0

ノーマルモードでZQを押すと、vimのヘルプにあるように「:q!」と同じ動作をするのだが、間違って保存すべきものを保存しない事故が絶えない。そのため、/tmp/とか、/usr/tmp/とかにZQ用のバックアップを保存する対策を考えた。

はじめはvimrcに以下のワンライナーを追加することを考えたが、
このままではvimを何のファイルも指定せず立ち上げて、そのまま終了したときに
エラーが起こり、終了できない。

.vimrc
nnoremap ZQ :setnobackup<C-m>:w!/usr/tmp/%:t~<C-m>:q!<C-m>

そこで、スクリプトを追加する改良を施し、条件分岐するようにした。
以下が最終的なvimrcへの記述になる。

.vimrc
function! ZQchecker()if expand('%:t')==""q!elsesetnobackupw!/usr/tmp/%:t~q!endifendfunctionnnoremap ZQ :silentcall ZQchecker()<CR>

(スクリプトの内容について)
set nobackupとしているのは、保存する際にset backupがあると、
すでに/usr/tmp/に同名のファイル名がある場合、
さらに名前に「~」が末尾についたファイルをbackupの機能で作ってしまうため。
この例では、末尾に「~~」が付いた名前のファイルができてしまう。

%はレジスタを参照しており開いてあるファイルを示すが、
そのままではパスを付けてしまうので:tを付けて回避している。

silentで関数を呼ぶようにしているのはこれがないと/usr/tmp/に保存した旨が
プロンプトに出てしまうためそれを表示させないため。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>