複雑になった時使うツール
作業をしていて複雑な状況になってくるとミスが多くなります。 そういう時に使うツールは普段から使っておいて手になじませておかないと、 いざ複雑な状況になったときに使えなくなります。 想定することができるありがちな事態への対処はあらかじめ準備しておくことが大事かもしれません。
Deadgrep
複雑な状況になったときに使えるgrep系ツールとして最も使いやすかったのはdeadgrepです。まさに私のなかではgrepは死んだという認識になりました。 まずはdeadgrepをインストールしましょう。
M-x package-install deadgrep
deadgrepはバックエンドにripgrepを利用するのでインストールします。
sudo pacman -S ripgrep
準備が整ったのでさっそく使ってみることにしましょう。
M-x deadgrep
起動してemacsを検索している画面です。
プロジェクト内(gitリポジトリ)でemacsと書かれているもの全てが一覧に現れます。 左の数字は行数で該当行でEnterを押すと該当行にジャンプします。 emacsを消してvimに修正したあとでdeadgrepバッファでgを押すと, 修正がdeadgrepに反映されるので上から順番につぶしていきたいときなどに便利です。
deadgrepの画面でメインの進捗を確認しながらswiper-isearchで気になるもの(vim)を検索すれば複雑な状況にも対処できます。
deadgrepを起動した直後の画面でM-pを押せば赤い四角のようになります。 M-pを連打するとdeadgrepで調べたものを遡っていくことができます。 deadgrepが過去の履歴を覚えてくれているので、 綴りを覚えていない単語(例えばalgorithm)を覚えておく必要はありません。 2つ前に調べたものと頭で記憶しておくだけでよいので脳のメモリを節約することができます。 脳のメモリを節約できれば複雑な作業のときのミスを減らすことができると思います。 なるべく簡単にできる方法を身につけることが大事なのではないでしょうか。
;; deadgrep-mode
(with-eval-after-load 'deadgrep
(bind-keys :map deadgrep-mode-map
("n" . next-line)
("p" . previous-line)
("j" . deadgrep-forward)
("k" . deadgrep-backward)))
deadgrepの設定はemacsで小指に負担をかけないように なるべくCtrlキーを使わないで済むように設定しています。
smerge-ediff
よく起こる面倒な状況といえばコンフリクトでしょう。git mergeしたりgit rebaseするとよく起きます。 コンフリクトしたときに使うツールはsmerge-ediff(vc-resolve-conflicts)がお勧めです。 実際に試してみるためにgit-merge-sandboxを使ってコンフリクトした状況を作ります。
git clone https://github.com/eiel/git-merge-sandbox
cd git-merge-sandbox
bin/restart
これでコンフリクトした状態になるのでさっそくsmerge-ediff(vc-resolve-conflicts)を使ってみましょう。
magitで見てみるとsample.txtとsample2.txtがコンフリクトしています。
これがコンフリクトしているファイルです。この状態で
M-x smerge-ediff(vc-resolve-conflicts)
すると以下のような画面になります。
nを押すと次の差分に移動します。 aを押すと左側のmasterの変更が選択されます。 右側のfeatureの変更は破棄されます。
nを押して次の差分に移動した画面です。 ここではfeatureの変更を選択したいのでbを押します。 左側のmasterの変更は破棄されます。 このファイルのコンフリクトはもうないのでqを押すと
コンフリクトが解消されたファイルができあがります。 同じ要領でsample2.txtも作業します。 コンフリクトしたファイルを解消する作業が楽になるのでとてもお勧めです。 smerge-ediffの使い方はこんな感じです。
M-x smerge-ediff(vc-resolve-conflicts)
n:次の差分
p:前の差分
a:左を採用
b:右を採用
r:差分を元に戻す
q:編集を終える
ブログ記事を投稿したらTwitterでお知らせいたします。ブログを気に入っていただけた方はお気軽にフォローしてください。
— Solist Work (@SolistWork) 2018年11月27日
関連記事
最新記事
タグ一覧
-
ansible (2)
application (8)
chrome (1)
command (14)
django (1)
docker (3)
document (1)
emacs (14)
git (2)
google (1)
hugo (1)
kubernetes (1)
linux (20)
makefile (6)
mariadb (2)
melpa (1)
postgresql (2)
python (1)
security (2)
terminal (11)
thinkpad (2)
work (6)
zsh (10)