VSCodeで勝手にタブが消えて困っていた話

現在、ソフト開発の仕事で携わっているプロジェクトでは、その開発をVSCode(Visual Studio Code)を使用して行っています。

2年ほど前まで携わっていたプロジェクトでは、Windows CEをベースとした組込み機器を開発していましたので、Visual Stuido 20XX を使用していたのですが(XXは、その開発対象に応じていろいろと)、現在は組込みLinuxということもあって、プロジェクトメンバー全員がVSCodeを使用しています。

ビルド環境は仮想マシンで動作するUbuntuにあって、そこにVSCodeからリモート接続している、という構成です。

開いたはずのファイルが…

2年近くVSCodeを使い続けていて、ソフト開発を行うエディタとしての便利さはかなり感じています。IntelliSenseでの補完機能や、複数ファイルにまたがる一括置換、定義箇所・参照箇所への移動など、数え上げればキリがありません。

が、そんな中で唯一使いづらいと思っていたのが「参照のために開いたファイルが、いつのまにか閉じられている」という問題。

新たなタブで開くケース

例えば、こんな感じ。

PROJECT1というフォルダに、test-1.c ~ test-3.c というファイルがあるとします。

エクスプローラー上で表示されている、test-1.c を開きます。

この時に、test-1.c を開いた目的がソースコードを編集するためならば、特に違和感はありません。

というのも、例えば、1行追加します(修正内容に意味はありません)。

保存ファイルと差分が出ると、タブに「●」が表示されます。

ここで、test-2.c ファイルを参照したくてエクスプローラーから test-2.c をクリックすると、

新しいタブとして、test-2.c が開きます。

test-1.c 、test-2.c とも、タブ切替で行き来できますので、違和感なく使えます。

同じタブで開くケース

ところが、ソースコードの修正をしようと test-1.c を開いた後、

test-2.c を参照したいと(例えば、test-2.c のある部分をコピーしたい時など)、エクスプローラー上で test-2.c をクリックすると…。

新たなタブではなく、test-1.c が開いていたタブが、test-2.c に置き換わります。

えー、せっかく開いたのに。。

という心境です。

勝手に閉じさせない対策方法

test-1.c を開いた後、編集前に test-2.c を新しいタブで開くためにはいくつかの方法があります。

①「開いたままにする」を明示的に指示

その一つが、開いたタブを、勝手に閉じさせないよう明示的に指示する方法。

タブの上で右クリックして、「開いたままにする」をクリック。ショートカットキーの Ctrl+K Enter でも可能です。

すると、その次にエクスプローラー上で test-2.c をクリックしても、新しいタブで開いてくれます。

②ドラッグアンドドロップで新たに開く

開いたファイルをそのままにする、と明示してやるのが面倒ならば、逆に直感的に「test-2.c を新しいタブで開く」ために、エクスプローラーから test-1.c の右隣のタブ位置に、ドラッグアンドドロップしてやります。

カーソルがキャプチャできないので妙な画像になりましたが、「test-2.c をここで開くぞ」という意思表示ですね。

こうすると、test-2.c のタブは「test-2.c用」となって、別のファイル(例えば、test-3.c)をエクスプローラー上からクリックしても、勝手に消えることはありません。

最初に開いた test-1.c は、開いたままにする明示的な操作をしていませんので、置き換わりました。こちらは、意図せず消えた感じが否めません。

③ダブルクリックで開く

最後に。実は、2年間VSCodeを使っていたのに、つい先日知ったことです。

勝手に閉じられたくないファイルは、エクスプローラーから「ダブルクリックで開く」。それだけです。

test-1.c をダブルクリックで開いて、その後に test-2.c をシングルクリックで開くと

test-1.c は保護され、 test-2.c が新たなタブで開きます。

test-2.c はシングルクリックで開いたので、この状態から test-3.c をシングルクリックで開くと、

test-2.c が test-3.c に置き換わりました。test-1.c は保護されています。

保護されるかどうかは見た目で判断できる

で、実は、もう1つ、ダブルクリックで開くのと同時に、つい先日知ったことが、「開いた状態を維持するか、勝手に閉じられる対象かどうかは、タブに表示されるファイル名でわかる」ということ。

勝手に閉じられるとき
開いた状態を維持するとき
ファイルを変更したとき

シングルクリックで開いたとき(勝手に閉じられる対象)は、ファイル名が斜字で、ダブルクリックで開いたとき(開いた状態を維持する対象)もしくはシングルクリックで開いた後、明示的に「開いたままにする」を指定したときは、ファイル名が斜体ではなく通常の文字で表示されています。

ファイル編集時は保存ファイルと差異があるということで●が付くことは知っていましたが、シングルクリックで開いた後に編集すると、●が付くと同時に「開いた状態を維持する」ことを示すために、斜体が通常書体に変化していることには気づいてませんでした。

うっかり消えるケースを防ぐ

例えば、test-1.c をシングルクリックで開いた後、プロジェクト内で全文検索をして、結果を別タブで開いたとします。

全文検索で検索した後に、「エディターで開く」をクリックする

例では表現しきれませんでしたが、例えば、思い当たる関数に利用したい処理があって、それを参照したい、という場合などでしょうか。

検索した結果から、test-2.c を開いてみようと、検索タブから test-2.c のあたりをクリックすると、

処理をコピーして貼り付けようとした、肝心の test-1.c が消えてしまっています。

こういうことにならないためにも、「これから加工したいファイル」は、ダブルクリックで開いておくのがいいんでしょうね。

test-1.c をダブルクリックで開いた後、検索して、その結果から test-2.c を開いた様子です。

2年間、VSCodeを使い続けてきて、今さらながらに知った、基本のキの話でした。