はじめに
「Applibot Advent Calendar 2020」 2日目の記事になります。
前日は @growsic さんの
【git tag】プッシュしたtag名を削除・変更してはいけない理由〜manコマンドで読めるgitメンテナの怒り〜 という記事でした!
これが無いと個人的に業務が辛いツール紹介(fzf, vim, tmux)
普段の業務でこれがないと辛いツールを紹介していこうと思います。
- fzf (ファジーファインダー)
- vim (エディタ)
- tmux (端末多重化)
以上の3つを用いることで快適なターミナルライフを送れています\(^_^)/
1つずつ紹介させてください。
fzf
ファイル検索する際、完全なファイル名を覚えていることなんてあまりないと思います。
こちらはなんとなくこんな名前だったな~みたいな名前でファイルやフォルダを検索することを可能にするCLIツールになります。
https://github.com/junegunn/fzf
お使いのPCへのインストールは以下のページを参考に
https://github.com/junegunn/fzf#installation
macなら以下のコマンドで導入できます。
brew install fzf
# To install useful key bindings and fuzzy completion:
$(brew --prefix)/opt/fzf/install
コマンド
基本
ターミナルでfzf
と打つと実行されます。
デフォルトでは配下のファイルを検索してくれるようなコマンドになっています。
fzf
vimリポジトリでmain.c
を検索する例です。
fzfと打った後にフォルダ配下のファイルを曖昧検索して一番近しいファイルが予測として出てきています。
しかし、この例では標準出力にpathが出力されるだけであまり便利感がないです。
応用
fzfコマンドだけでは検索したあと、標準出力されるだけのため、他のコマンドと組み合わせることで威力を発揮します。
$()
を用いることで実行結果を展開することができるので、以下の例でvimで開くことができます。
vim $(fzf)
上記のコマンドを打ち、開きたいファイル名を検索した後は、
ctrl-n
で下へ, ctrl-p
で上へ選択移動できます。
完全なpathを打つことなく、曖昧に検索してファイルを開くことができました。
なんとなくのファイル名を打つだけでファイルを開けてしまうのがファジーファインダー最高といった感じです...!
wiki
以上のようなfzf
を活用した例がfzfのwikiにたくさんのっています\(^o^)/
https://github.com/junegunn/fzf/wiki/Examples
.bashrcや.zshrcに記載することでターミナルでいつでも使えるようになります。
お気に入り
# fbr - checkout git branch
fbr() {
local branches branch
branches=$(git --no-pager branch -vv) &&
branch=$(echo "$branches" | fzf +m) &&
git checkout $(echo "$branch" | awk '{print $1}' | sed "s/.* //")
}
ローカルブランチをあいまい検索してチェックアウトするやつです。
fbr
と打った後にcheckoutしたいブランチ名を入力することで選択したブランチにcheckoutすることができます。
少ないブランチだとありがたみが少ないですが、開発が進み、ブランチが増えてくるとなんとなくの名前でブランチを検索できるのがすごく嬉しいです。
vim
vimは言わずもがな最高なので特に紹介はないです...。
自分が使っているプラグインと今回紹介したfzf
に因んでvim-fzf
の紹介をしようと思います。
simeji/winresizer
windowのリサイズが高速/手軽にできるようになります。
ctrl-e [h/j/k/l] で高速にリサイズ!
neoclide/coc.nvim
vimがIDEになってしまうプラグイン。
補完やら定義ジャンプほんとすごい。
vim-lsp-settingsから乗り換えたがこちらも良い感じ。
mechatroner/rainbow_csv
色がついてcsvが見やすくなるプラグイン。
sqlっぽいクエリで絞り込むこともできるが扱いこなせていない...。
junegunn/fzf.vim
先ほどのfzfをvim上から使えるようにしたプラグインになります。
導入
vimプラグインマネージャのvim-plugを利用している場合の導入例です。
call plug#begin('~/.vim/plugged')
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
Plug 'junegunn/fzf.vim'
call plug#end()
" fzf settings
let $FZF_DEFAULT_OPTS="--layout=reverse"
let $FZF_DEFAULT_COMMAND="rg --files --hidden --glob '!.git/**'"
let g:fzf_layout = {'up':'~90%', 'window': { 'width': 0.8, 'height': 0.8,'yoffset':0.5,'xoffset': 0.5, 'border': 'sharp' } }
let mapleader = "\<Space>"
" fzf
nnoremap <silent> <leader>f :Files<CR>
nnoremap <silent> <leader>g :GFiles<CR>
nnoremap <silent> <leader>G :GFiles?<CR>
nnoremap <silent> <leader>b :Buffers<CR>
nnoremap <silent> <leader>h :History<CR>
nnoremap <silent> <leader>r :Rg<CR>
導入することでvim上からfzfを扱えるようになります(T_T)/!
上記の設定で
-
space+f
でファイル検索 -
space+g
でgitファイル検索 -
space+r
でgrep検索 - ...
のようなキー設定になっています。
操作例
以下、実際の画面と操作コマンドです。
# とりあえずvim開く
vim
# ファイル検索 (ここからはvimでの操作)
space + f
# ファイル名入れる
main.c
# 開く
Enter
# もうひとつ開きたいファイルがあるのでファイル検索
space + f
# ファイル名入れる
change.c
# ファイル開く(画面分割-横)
ctrl-v
# ファイル上にあるこの関数使っているとこ調べたいのでgrep
space + r
# 関数名いれる
change_warning
# ファイル開く(画面分割-縦)
ctrl-x
fzfのおかげでvim上から目的のファイルへ簡単にたどり着くことができます...!
tmux
端末の画面を分割したり、複数タブで管理できたり、セッションをデタッチできたりと便利なやつです!
特に設定はしていなく、初期設定(prefix: Ctrl+B)で使用しています。
導入
macでのインストールなら以下で!
brew install tmux
操作
一度ターミナルでtmux
と打つと起動し、
そのあと、コマンドやプレフィックスと呼ばれる Ctrl+b
を押した後、
特的のキーを入力することで操作ができます。
よく使うコマンド チートシート
コマンド | ショートカット | 概要 |
---|---|---|
tmux new-window | ctrl-b + c | ウィンドウ作成 |
tmux kill-window | ctrl-b + & | ウィンドウ破棄 |
tmux next | ctrl-b + n | ウィンドウ次移動 |
tmux prev | ctrl-b + p | ウィンドウ前移動 |
tmux split | ctrl-b + " | ペイン分割 横 |
tmux split -h | ctrl-b + % | ペイン分割 縦 |
tmux kill-pane | ctrl-b + p | ペイン破棄 |
tmux detach | ctrl-b + d | デタッチ |
tmux attach | - | アタッチ |
tmuxがあるおかげでvimでファイル編集している際に
ビルドしたいなーて思ったりgit操作したいなーって時に適当に画面分割してそちらのターミナルで操作することができて便利です。
以下はソースファイルを開いているときに
git pull
してmake
する時の例です。
操作コマンド
# とりあえずvim開く
vim
# ファイル検索 (ここからはvimでの操作)
space + f
# ファイル名入れる
main.c
# 開く
Enter
# git使いたいから上下に画面分割したい
ctrl+b "
# git操作
git status
git pull origin master
# コンパイルしたいから左右に画面分割したい
ctrl+b %
# コンパイル
make
ターミナルを複数開いて、画面が散らかってしまうことが少なくなったのですごく重宝しています。
おわりに
以上のfzf, vim, tmuxの三種の神器のおかげで膨大なソースコードを相手に戦えている気がします\(^o^)/
ターミナル内で業務を完結!...させているとカッコ良いのですが、
JetBrainsさんの強大な力には及ぶことが出来ず、
Intellij等に頼っている部分もあるため、
軽いコード調査・修正や設定ファイル編集・git操作・コンパイル等はターミナル、
ガッツリコード書いたりデバッグする場合はIDEを使用するという使い分けをしています。
いつかはターミナルに引きこもれると夢見て精進していこうと思います!
「Applibot Advent Calendar 2020」 2日目の記事でした!
明日は @taratarai さんです!