Edited at

VSCode設定メモ: カレントタブのディレクトリのMakefileを一発で呼ぶ


Notepad++からVS Codeへ

今まで様々なテキストエディタを試してきて, 満足するエディタはNotepad++だけだった.

だが, 最近VS Code拡張機能の組み合わせにより, 同等の機能が実現できたため, 入力補完が優秀なVS Codeへ移行した.


Notepad++

これまで, テキスト編集からプログラミング, LaTeXまで全てNotepad++でやってきた.

NppExecというプラグインが優秀で, Notepad++にターミナル環境を与えてくれていた.

notepad++.png

さらに, Follow ${CURRENT_DIRECTORY}という神がかったオプションまであった.

この機能は, 下のターミナルのディレクトリが, 現在開いているタブの階層になるというものだ.

しかもF6キーで登録したコマンドを実行可能だった.

なので, いつもmakeを登録しておき, カレントディレクトリを気にすることなくF6を押すだけでコンパイルができていた.


LaTeX用Makefile

カレントディレクトリの全ての.texファイルをコンパイルする.


Makefile

FILE = $(wildcard *.tex)

PDF = $(FILE:.tex=.pdf)
DVI = $(FILE:.tex=.dvi)

.PHONY:run
run:$(PDF) $(DVI)

%.pdf: %.dvi
dvipdfmx $<
# cmd /c start $@

%.dvi: %.tex
platex $<
# pbibtex $*

#クリーンして実行
.PHONY: all
all: clean run

#クリーン
.PHONY:clean
clean:
rm -f $(PDF) $(DVI)




  • cmd /c start $@のコメントアウトを外せば, コンパイル後PDFを開く


  • pbibtex $*は, .bib用


C++用Makefile

cppコンパイル用.


Makefile


###################################################
# Makefile (*.cppをコンパイルする場合)
# コンパイルしたいソースがあるフォルダと同じところに置く
# ディレクトリ階層図
# this
# |--- *.cpp (コンパイルしたいソースファイル)
# |--- Makefile
# |--- run.exe (生成される実行ファイル)
# |--- obj (生成されるフォルダ)
# |--- *.o (生成されるオブジェクトファイル)
# |--- *.d (生成される依存関係ファイル)
#
# 実行コマンド
# make (更新されたファイルのみコンパイル)
# make all (クリーンしてビルド)
# make clean (クリーン)
###################################################
AR = ar
ARFLAGS = rus

CXX = g++
CXXFLAGS = -g -MMD -MP -Wall -Wextra -Winit-self -Wno-unused-parameter -std=c++11 -O3

RM = rm -f
LDFLAGS =
LIBS =
INCLUDE =
#実行ファイル
TARGET = ./run.exe
#オブジェクトファイル保存フォルダ
OBJDIR = ./obj
#ソースファイル
SOURCES = $(wildcard *.cpp)
#オブジェクトファイル
OBJECTS = $(addprefix $(OBJDIR)/, $(SOURCES:.cpp=.o))
#依存関係ファイル
DEPENDS = $(OBJECTS:.o=.d)
#実行ファイル作成
$(TARGET): $(OBJECTS) $(LIBS)
$(CXX) -o $@ $^ $(LDFLAGS)
#ソースファイルをコンパイル
$(OBJDIR)/%.o: %.cpp
@if [ ! -d $(OBJDIR) ];\
then echo "mkdir -p $(OBJDIR)";mkdir -p $(OBJDIR);\
fi
$(CXX) $(CXXFLAGS) $(INCLUDE) -o $@ -c $<

#クリーンしてビルド
.PHONY: all
all: clean $(TARGET)

#クリーン
.PHONY:clean
clean:
$(RM) $(OBJECTS) $(DEPENDS) $(TARGET)

-include $(DEPENDS)


※MakefileのインデントはすべてTabです.

コピペするとSpace4つになるので, \tに置換してください.


VS Code

VS Codeにはもともとターミナルがついているが, nppExecのような現在のタブに従うような機能はない.

Ctrl+@でターミナルを開くと, 特に設定していない場合, $HOMEで開くだろう.

しかし, 拡張機能terminal-command-keysを使えば, nppExecに近いことが行える.

拡張機能をインストール後, Ctrl+K, Ctrl+Skeybindings.jsonに以下を追加.

    {

"key": "F5",
"command": "terminalCommandKeys.run",
"args": {
"cmd": "cd `dirname \"${file}\"`;make"
}
},
{
"key": "ctrl+F5",
"command": "terminalCommandKeys.run",
"args": {
"cmd": "cd `dirname \"${file}\"`"
}
},
{
"key": "shift+F5",
"command": "terminalCommandKeys.run",
"args": {
"cmd": "!!"
}
},

この例ではF5を押すと, カレントタブのディレクトリでmakeを実行する.

Ctrl + F5で, カレントタブのディレクトリに移動できる.

このようにしておけば, ターミナルのディレクトリを意識することなくmakeを実行できる.

Shift + F5で, 直前のコマンドを実行できる. (!!: 直前のコマンド実行を表す. )

また, 現在のキャレットがエディタ側になく, ターミナル側にある場合にも実行を可能にするには, Ctrl+,settings.jsonに以下の設定が必要.

"terminal.integrated.commandsToSkipShell":の項目のリストに, "terminalCommandKeys.run"を追加.


その他の設定


settings.json


  • 文字コード自動判定ON


    • "files.autoGuessEncoding": true,



  • LaTeX Workshop自動コンパイルOFF


    • "latex-workshop.latex.autoBuild.onSave.enabled": false,

    • "latex-workshop.latex.autoBuild.run": "never",



  • Cygwin terminalへ変更


    • "terminal.integrated.shell.windows": "C:\\cygwin64\\bin\\bash.exe",

    • "terminal.integrated.shellArgs.windows": ["--login", "-i"],



  • スペース表示


    • "editor.renderWhitespace": "all",



  • フォントサイズ変更


    • "editor.fontSize": 13,

    • "terminal.integrated.fontSize": 13,



  • タイトルバーにフルパス表示


    • "window.title": "${activeEditorLong} - VS Code",




keybindings.json


  • タブ切り替えで, 見た目順に動くようにする (履歴順解除)



{
"key": "ctrl+tab",
"command": "workbench.action.nextEditor"
},
{
"key": "ctrl+shift+tab",
"command": "workbench.action.previousEditor"
},


拡張機能


  • Bracket Pair Colorizer

  • C/C++

  • Japanese Language Pack for VS Code

  • LaTeX Workshop

  • Matlab

  • Python

  • Rainbow CSV

  • Reopen Closed Tab

  • terminal-command-keys