Emacs から TFS を使う tfs.el
Emacs から TFS(Team Foundation Server) を使えるようにする tfs.el の紹介です。
Emacs 上から全部の作業ができるという程のものではないのですが、 Visual Studio の補助として使うとちょっと便利かなと思います。
ダウンロード
以下のサイトなどからダウンロードしてください。
インストール、設定
まず、ダウンロードした tfs.el をパスの通ったフォルダーに置きます。次に .emacs.el に設定を追加します。
(require 'tfs) (global-set-key "\C-xvo" 'tfs/checkout) (global-set-key "\C-xvi" 'tfs/checkin) (global-set-key "\C-xvp" 'tfs/properties) (global-set-key "\C-xvr" 'tfs/rename) (global-set-key "\C-xvg" 'tfs/get) (global-set-key "\C-xvh" 'tfs/history) (global-set-key "\C-xvu" 'tfs/undo) (global-set-key "\C-xvd" 'tfs/diff) (global-set-key "\C-xv-" 'tfs/delete) (global-set-key "\C-xv+" 'tfs/add) (global-set-key "\C-xvs" 'tfs/status) (global-set-key "\C-xva" 'tfs/annotate) (global-set-key "\C-xvw" 'tfs/workitem) ;; tf, tfpt のパス設定 (Visual Studio 2010 用) (setq tfs/tf-exe "c:\\Program Files\\Microsoft Visual Studio 10.0\\common7\\ide\\tf.exe") (setq tfs/tfpt-exe "c:\\Program Files\\Microsoft Team Foundation Server 2010 Power Tools\\TFPT.EXE") ;; ログイン設定 (指定しない) (setq tfs/login "")例として私の環境での設定をあげてみました。 キー設定のあたりはそのままでかまわないのですが、以下の 2 つは環境に合わせて変更をする必要があります。
- tf.exe のパス
- ログイン
tf.exe のパスの設定
TFS のコマンドラインツール tf.exe のパスを指定します。上記は Visual Studio 2010 のインストール先をデフォルトのものから変更しなかった場合の設定です。 Visual Studio 2008 の場合にはデフォルトのインストール先であれば、 省略することもできます。
tfpt.exe のパスは annotate, workitem のコマンドを使わないのであれば、 設定する必要はありません。
私も使ってないのですが、サンプルとして書いてみました。
ログイン設定
上記の例はログインの指定を省略する場合のものです。ユーザーやパスワードを指定する場合には以下のような記述を行います。
(setq tfs/login "/login:domain\\userid,password") ;; -or- (setq tfs/login (getenv "TFSLOGIN"))tfs/login の変数が tf.exe 実行時にオプションとして渡されます。 私の環境ではなぜか指定しない方がうまくいったので、省略しました。
うまく動かない場合には以下のようなコマンドなどで tf.exe がちゃんと動作するか確認してみてください。
> tf.exe properties ファイル名
使い方
基本的に Emacs でファイルを開いて、 そのファイルに対してコマンドを実行するという使い方になります。以下の表にキーと Visual Studio の対応するメニュー項目をまとめてみました。
キー | コマンド | 対応するメニュー項目 |
---|---|---|
C-x v o | checkout | 編集用にチェックアウト |
C-x v i | checkin | チェックイン |
C-x v p | properties | |
C-x v r | rename | |
C-x v g | get | 最新バージョンの取得 |
C-x v h | history | (履歴) |
C-x v u | undo | 保留中の変更を元に戻す |
C-x v d | diff | (最新バージョンとの相違) |
C-x v - | delete | |
C-x v + | add | |
C-x v s | status | |
C-x v a | annotate | |
C-x v w | workitem |
コマンドはいろいろありますが、私の場合は最初の 2 つ チェックアウト(C-xvo) と チェックイン(C-xvi) しか使っていません。
がっつり編集する場合は私も VS でプロジェクトごとチェックアウト、チェックインしています。 しかし、ファイルを眺めていて、ちょこっと直したいと思う場合もあります。 そういった時にはいちいち VS から操作して、開き直してといったことをする必要がなくなるので、 このコマンドが重宝しています。
TypeScript 用 Emacs モード
前に TypeScript のインストール方法
を紹介しました。
その際、 TypeScript の Emacs 用モードはリリースが停止されていたため、
インストール方法を書いていませんでした。
リリースが再開されたようなので、今回は TypeScript ファイルを Emacs で編集するためのモード
(TypeScript.el)のインストール方法について説明します。

ダウンロード
以下のサイトに公開されています。- Sublime Text, Vi, Emacs: TypeScript enabled! - Interoperability @ Microsoft - Site Home - MSDN Blogs

インストール
取得した圧縮ファイルを展開し、 TypeScript.el をパス(load-path)の通ったフォルダーに置きます。~/emacs.d/init.el に設定を記述します。
最小限必要なのは次の記述です。
(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) (autoload 'typescript-mode "TypeScript" "Major mode for editing typescript." t)あと、 M-x byte-compile-file で TypeScript.el をバイトコンパイルしておくと、 多少読み込みが速くなります。
TypeScript 用として特に新しくキーが割り当てられているものはありませんが、 C++ や Java と同じ cc-mode を基に作られているので、 だいたい同じ機能が使えます。
コンパイル
エラーメッセージ形式の登録
以前にも書きましたが、 M-x compile によるコンパイルをするためには、 次の記述も init.el に書いておきます。(require 'compile) (setq compilation-error-regexp-alist (append '(;; d:/h...ript/sample.ts (13,175): ("^\\(.*\\) (\\([0-9]+\\),[0-9]+):" 1 2)) compilation-error-regexp-alist))
デフォルトコマンドの改良
コンパイル時のコマンドをちょっと改良する方法も紹介します。以下の記述を init.el に追加して下さい。
(defun typescript-mode-init () (set (make-local-variable 'compile-command) (format "tsc -sourcemap %s" (file-name-nondirectory (buffer-file-name))))) (add-hook 'typescript-mode-hook 'typescript-mode-init)引数にファイルを指定したものがデフォルトになり、値もバッファで独立するようになります。 例えばファイル名が hello.ts の場合、デフォルトは次のコマンドです。
tsc -sourcemap hello.tsパスやオプションを変えたい場合は format に渡している文字列を変更して下さい。
出力バッファの自動クローズの停止
tsc はちゃんとエラー時には正常終了と違った終了ステータスで終わるため、 コンパイル後に出力バッファを自動的に閉じる方法が使えます。Emacs における矩形領域のコピペ系編集機能
Emacs では矩形領域で切り取り、貼り付けといったことが可能です。
これは結構コーディングなどに便利なので、今回はこの矩形領域の編集機能について紹介したいと思います。
ちなみに MS Word や Visual Studio では Alt + ドラッグで矩形領域を指定できます。
基本機能
基本は矩形で切り取って、貼り付けます。キー | コマンド | 機能 |
---|---|---|
C-x r k | kill-rectangle | 切り取り |
C-x r y | yank-rectangle | 貼り付け |

切り取り

貼り付け

ちなみに VS などと違い、矩形領域で切り取った内容はクリップボード(kill-ring)とは別に記録されます。
その他の矩形処理
切り取り、貼り付け以外にも次のような機能があります。キー | コマンド | 機能 |
---|---|---|
C-x r d | delete-rectangle | 削除(保存しないので、貼り付けはできない) |
C-x r c | clear-rectangle | クリア(空白への置換) |
C-x r o | open-rectangle | 指定領域分の空白を挿入 |
C-x r t | string-rectangle | 指定文字への置換 |
C-x r N | rectangle-number-lines | ナンバリングする |
クリア( C-x r c ) :


空白の挿入( C-x r o ) :


置換( C-x r t ) :


領域内を "|" で置換
ナンバリング( C-x r N ) :


矩形でのコピー
"あれ、コピー忘れてない?" と思った人もいるかもしれません。しかし、忘れたわけではなく、この矩形領域の処理では切り取りはあるのに、なぜかコピーがありません。 理由はよくわかりませんが、切り取った後、Undo すれば、コピーと同じではあります。読み取り専用バッファー
ただ、そのままだと読み取り専用バッファーでは切り取りができません。 kill-read-only-ok 変数を t(真) に設定すると、読み取り専用の場合にはコピーをするようになります。変数の設定は M-x customize-option kill-read-only-ok とCustomizeで設定するか、以下の記述を ~/.emacs.d/init.el に追加して下さい。
(setq kill-read-only-ok t)
矩形のコピー関数の自作
前節の方法でも構わないのですが、 いちいち Undo するのも面倒なので、矩形でのコピーコマンドを自作してみました。以下の記述を ~/.emacs.d/init.el に追加すると C-x r e で矩形のコピーができるようになります。
(defun my-kill-rectangle-ring-save (start end) "Copy the region-rectangle and save it as the last killed one." (interactive "r") (setq killed-rectangle (extract-rectangle start end)) (deactivate-mark) (message "Copy rectangle region")) (define-key ctl-x-r-map "e" 'my-kill-rectangle-ring-save)