一時ファイル、作業用ファイルを使い倒すための実戦向けテクニック
設定ファイルを編集したり、コーディングすることだけが、Vimエディタの使い道ではありません。 Vimエディタに備わっている高い編集能力は、他の雑多な作業においても十分に役に立つものがあります。 このページでは、それら小作業において多用されることの多い、 一時ファイル、作業用ファイル、メモ用ファイルをより活用する術をご紹介します。 コーディングの共に、議事録のメモに、計算処理の結果算出にと、役立つ場面の多い技術です。 (Windows, Mac)
概要
設定ファイルを編集したり、コーディングすることだけが、Vimエディタの使い道ではありません。
Vimエディタに備わっている高い編集能力は、他の雑多な作業においても十分に役に立つものがあります。
このページでは、それら小作業において多用されることの多い、
一時ファイル、作業用ファイル、メモ用ファイルをより活用する術をご紹介します。
コーディングの共に、議事録のメモに、計算処理の結果算出にと、役立つ場面の多い技術です。
無名バッファを作業用領域として利用する
新規にVimエディタを立ち上げるか、 :enew コマンドで空のバッファを作り、 そのバッファを作業用の領域として利用します。
最も簡単に作業用の領域を用意できる方法ではありますが、 Vimエディタを終了してしまえば編集していた情報は消滅してしまいますし、 一部プラグインの機能の利用やバッファの切り替えなどで、不都合が生じることもあります。
しかし、いくらかの簡易な作業は、無名バッファでも十分なはずです。
無名バッファの作り方
新規にVimエディタを立ち上げるか、起動中のVimエディタから無名バッファを作るコマンドを実行する。
" 新たに無名バッファを開く :enew " ウィンドウを分割して、そこに無名バッファを開く :split +enew :vsplit +enew " 新しいタブを作り、そこで無名バッファを開く :tabnew
無名ファイルのクラッシュ時のリカバリー方法
万が一、無名ファイルで作業中にVimエディタがクラッシュしてしまった場合でも、
.swp、.swoという名前のスワップファイルを探して、そのファイルに対して :recover コマンドを実行すれば、
クラッシュ前の状態までリカバリできます。いざというときは、このリカバリー方法を思い出しましょう。 [1]
" スワップファイルからリカバリ :recover .swp
作業終了後の無名ファイルの閉じ方
無名バッファでの作業終了後は、
ZQ コマンドや :bd! コマンドでバッファを閉じます。
( ZQ コマンドは編集中のバッファの状態を保存せずにバッファを閉じられるコマンド。)
ZQ コマンドは通常編集作業では、 編集結果を保存せずにバッファを閉じてしまう可能性のある危険性の高いコマンドですが、 一時ファイルや作業用ファイルを活用する場合は多用することになります。
スクラッチバッファを作業用領域として利用する
スクラッチバッファは作業のために領域として使うのに向いている。 簡単な作業であれば、多くの場合、非常に利用しやすい。
スクラッチバッファの作り方
Vimエディタでスクラッチバッファを利用するには、
- Kaoriya版Vimエディタに含まれる、 :Scratch コマンド [2] を使うか、
- Vim公式サイトで配布されている スクラッチバッファ管理系プラグイン [3] をインストールする、
と良い。
多くのスクラッチバッファ管理系プラグインでは、一度、スクラッチバッファを閉じてしまうと、 閉じる前の情報は消失していまい、復元できない。注意して利用してほしい。
一時ファイルを作業用領域として利用する
一時ファイルを作成し、そのファイルを作業用ファイルとして利用します。
この方法ではファイルシステム上にファイルが実際に存在するので、
作成したファイルを対象に外部コマンドなども実行できます。 [4]
これは一時ファイルを作業用領域として使う場合の、大きな利点の一つです。
一時ファイルの作り方
一時ファイルは、Vimエディタの一時ファイル作成機能を利用して作り出せば良いでしょう。
この時作成した一時ファイルは、Vimエディタ終了時に削除されます(ということになっている)。
一時ファイルは、削除されるまでは他のアプリケーションからも利用できるし、 別のファイルで作業後に開き直すこともできます。
" 一時ファイルを作成して、開く :edit `=tempname()`
上記コマンドを実行すると、例えば、次のような名前のファイルが開かれます。
どのような名前のファイルが開かれるかは、貴方のVimエディタの実行環境次第です。
/var/folders/F0/F0evLcz0Giymvy+P9VHaJ++++TM/-Tmp-/v982233/0
一時ファイル作成用のコマンドを用意する
一時ファイル作成を多用する場合は専用のコマンドを用意しておくと、一時ファイル作成の手間を省けます。
コマンド定義の例を挙げる。
この設定をVimエディタの設定ファイルに追加すると、
:OpenTempfile コマンドで一時ファイルを開けるようになります。
" 一時ファイルを作成して開く、OpenTempfileコマンドを定義 :command! OpenTempfile :edit `=tempname()`
利用していた一時ファイルを後から探す
他のファイルでの作業を行った後、一時ファイルを再び開く場合は、
作業していた一時ファイルのファイル名を思い出すのは大抵の場合、困難なので、
などの、過去に開いたファイルを記録できるプラグインを使って、ファイルを探すと良い。
実ファイルを作業用領域として利用する
明示的に「todo.txt」や「meeting-20091112.txt」のようなファイル名を指定してファイル作成し、
そのファイルを作業用の領域として利用します。
数日間、数週間など、ある程度の期間、情報をキープしたい時に向いています。
ただし、実ファイルを作業ファイルとして利用する場合は、
そのファイルが必要なくなった時に、自分で後始末、削除しなければなりません。
日付入りファイル
ファイル名に日付を入れておけば、利用した日付ごとにファイルを整理できるので、 後日、情報を再利用しやすくなります。
日付入りのファイルを作成する方法はいくつかありますが、
このページでは、Vimエディタの設定ファイルであらかじめ日付変数を設定しておいて、その変数をファイル名の一部として使用する、
という、入門者にも簡単に利用、応用できる方法を紹介します。
日付入りファイルの作り方
Vimエディタの設定ファイルで「$TODAY」変数を定義しておいて、
" 今日の日付を「$TODAY」に入れておく。Vimエディタ起動時に設定される。 :let $TODAY = strftime('%Y%m%d')
ファイルを開くときにファイル名の一部として「$TODAY」を指定します。
" 作業日の日付の入ったファイルを作る :edit ~/Desktop/meeting-$TODAY.txt " #=> :edit ~/Desktop/meeting-20091112.txt " $TODAYが日付に展開される。
連番入りファイル
データ変換用のファイルなど同じ用途で複数のファイルが必要な場合は、連番ファイルを使用すると良いでしょう。
筆者の作成した コマンドライン行数値インクリメントデクリメントプラグイン [7] が役に立つかもしれない。
多数の連番入りファイルの作り方
一度に多数の連番入りの作業ファイルが必要な場合は、 Vimエディタからではなくシェルから作ります。
全ての環境での方法を紹介することはとてもできないため、
ここではWindows PowerShell環境と、Unix bash環境での、連番入りファイルの作り方の例を紹介します。
下コードは、ファイルにいったん書いてから実行しても良いが、シェルに直接入力しても実行できる。
# Windows PowerShell 連番ファイルの作り方 # template.txtを複製して、連番ファイルを作成する for ($i = 1; $i -le 10; $i ++ ) { cp template.txt work-$i.txt }
# bash 連番ファイルの作り方 # template.txtを複製して、連番ファイルを作成する for i in {1..10} do cp template.txt work-$i.txt done
既存のファイルを作業用ファイルのテンプレートとして使う
テスト用コードの作成、似たような文面の文章の作成などで、
既に存在する既存ファイルをベースにして、作業用ファイルを作りたい時もあるでしょう。
覚えておくと便利なコマンドをいくつか紹介します。
" 他のファイルを読み込み、カーソル位置に流し込む :read filename " テンプレートにしたいファイルを開いている状態で、 " そのファイルを他のファイルに書き込んで、即開く。 :saveas filename
:read コマンドは一度に一つのファイルしか読み込めない。
多数のファイルを一度に読みたい場合は、筆者作 rargs.vimプラグイン [8] が役に立つ。
" カーソル位置に、指定した複数のファイルの内容を流し込む。 :RArgs *.cs *.java *.pl
作業用ファイルを直接実行する
作業ファイルが実行可能なプログラムのコードである場合、 作業後に、そのファイルを確認のため、あるいは新たな成果物を出力するため、「実行したい」という事は良くあることだと思います。
- Vimスクリプトファイルであれば、 batch.vim [9] を、
- Perl、Python、Ruby、シェルスクリプト辺りであれば、 quickrun.vim [10] を使えば、
編集中の作業ファイルを実行できます。
目次ファイルからのリンク
何度も何度も後から開き直す事になる場合は、ファイルパスの一覧ファイルを作成しておくと、
ファイル名の上で gf を押下して、そのファイルまで移動できる。
# このようなファイル名一覧を用意しておいて、移動したいファイル名の上でgfを押下する。 crash-recovery.html file-dialog.html open-lastfile.html seemingly-unneeded-file.html workingfile.html
ファイル名の一覧は、外部コマンドを利用して作成しても良いし、
" lsコマンドを使用してファイル一覧を読み込む :read !ls
lsf.vimプラグイン [11] を使用して作成しても良い。
" カーソル位置にファイル一覧を読み込む :LSF
ファイルタイプを設定する
一時ファイル、作業用ファイルであっても、ファイルタイプは設定できます。
最も簡単なファイルタイプの設定方法は、 作業用ファイルの拡張子を利用したいファイルタイプ用の拡張子にしてしまうことですが、 短期間の利用であれば、直接コマンドでファイルタイプを設定しても良いし、
" memoファイルタイプを指定する(Kaoriyaパッチ) :setlocal filetype=memo
ある程度の期間の利用が見込まれるのであれば、モードラインを設定しても良いでしょう。 [12]
" シェルスクリプトであれば、このようなモードラインをファイルに設定する # vim:set filetype=memo :
参考情報リンクなど
外部のページへのリンクが多かったので、まとめてあります。
[1] | swapファイルが見つかった場合にどのように対処すべきか(クラッシュからのリカバリー) |
[2] | cmdex.vim : Kaoriyaパッチ ユーティリティコマンド集 |
[3] | scratch utility : 自由に開閉できる作業用バッファ管理プラグイン |
[4] | vimエディタから外部のプログラムやコマンドを実行する。 |
[5] | mru.vim : 開いたファイルの履歴を管理して、最近開いたファイルに簡単にアクセスできるようにするプラグイン |
[6] | FuzzyFinder : buffer/file/command/tag/etc explorer with fuzzy matching |
[7] | cmdline-increment.vim : コマンドライン行で数値インクリメント、デクリメント |
[8] | rargs.vim : 指定した複数のファイルを一度に読み込む |
[9] | batch.vim : 選択した範囲に記述されたvimスクリプトを実行する |
[10] | quickrun - run a command and show its result quickly |
[11] | lsf.vim : カレントディレクトリ以下のファイル、ディレクトリ一覧を読み込む |
[12] | モードラインを使って、ファイルごとにvimエディタのオプションを指定する。 |
Recent Comments
ありがとうございます!
http://nanasi.jp/articles/howto/editing/visualcursor-endtoend.html · 7 years ago
知りませんでした。有難うございました。
http://nanasi.jp/articles/howto/file/open-with-format.html · 9 years ago
<c-f>1ページ分、下にスクロールする<c-b>1ページ分、上にスクロールする
どっちも逆です。
http://nanasi.jp/articles/howto/user-manual/user-manual-motion.html · 10 years ago
set 使用時に : で閉じるのを忘れて右往左往してました。
http://nanasi.jp/articles/howto/file/modeline.html · 10 years ago
やっぱり日本語の方が早いっす。
http://nanasi.jp/articles/howto/help/help_ja.html · 11 years ago