vim色に染まれ
vim色って何なんだろうね?
環境
- lenovo-S21e
- ubuntu16.04LST
- vimにプラグインは入れたくない派
目的
vimは素晴らしいエディター
秘められた可能性が大きすぎるため,
デフォルトの機能ですら使いこなすのが難しい.
また,bashをvi仕様にする記事が意外と少ない.
そこで,あんまり紹介されていない系の便利(?)機能と愚痴の数々を紹介したい.
(´・ω・`) < 紹介されてないってことは常識?
(´・ω・`) < つまり知らなかった自分は常識人ではなかった?...
(´;ω;`) < ウッ… ぼやいてばっかだし...
vim以外でも使えるものもあるので.
bashをvi仕様に set -o vi
export EDITOR=vim
の設定をしているであろうか.
きちんと設定ファイルに書き込んでおこう.
そうでないと,gitとかのエディターがvim以外に設定されることがある.nanoとかemacsとか.
bashはデフォルトではemacsに似たキーバインドになっている.
一例はこんな感じ.
ctrl f %次の文字へ
ctrl b %前の文字へ
ctrl a %先頭の文字へ
ctrl e %末尾の文字へ
ctrl p %前のコマンド履歴へ
ctrl n %次のコマンド履歴へ
ctrl k %カーソル位置から行末まで削除
ctrl u %カーソル位置から行末まで削除
ctrl d %カーソル位置の文字を削除
ctrl h %BSC
(´;ω;`) < せっかく覚えたのにemacsのキーバインドだったとは...
しかし,この辺もしっかりvim仕様にしておきたい.
プラグインなど入れずとも, bash上で
set -o vi
と叩くだけでよい.
~/.bashrcにでも書いておけば勝手に呼び出される.
ただし若干通常のvimと違う動作をするので,重要なところだけピックアップしておこう.
履歴の辿り方
bashのコマンドラインを,historyのように過去のコマンドが上に隠れているファイルと捉えると操作を捉えやすくなる.
つまりコマンドの履歴を辿りたければ,コマンドモードに入って上の行を見てやれば良い.
k %前のコマンド履歴へ
j %次のコマンド履歴へ
ただし,ctrl eやctrl y とかctrl f, ctrl b, ctrl u, ctrl dは使えない.
次で紹介するvisual modeでは使うことができる.
愚痴
(´・ω・`) < vimのコマンド履歴はctrl pやctrl nで辿れるのになんで?
(´・ω・`) < 補完機能のコマンドないんだから,空いてるやん...
コマンドラインでは,直接は使えないコマンド(実は使えるよ)
行内の移動に関するコマンドはほとんど使えるので,これだけでも十分便利だが使えないものがある.
ci"
とか,visual modeの選択系のコマンドだ.
ただし,
2cw
とかは使える.
糞だな思ったあなた,実はそんなことはない.
次で紹介する機能を使えば良い.
の前に,愚痴を
(´・ω・`) < ci"とかvのコピペとか,見てわかるから便利なのに...
(´・ω・`) < dt"とかcf}とかでギリ代用はできるけど...
(´;ω;`) < 2cwとか数字で指定する系のコマンドは苦手なの...
visual modeでファイルとして開き編集できる
コマンドモードでvを押すと,
visual modeもとい,ファイルのように編集できるモードに切り替わる.
ここではbash scriptをファイルとして編集し,最後にZZや:wqで保存すると,
ファイルに書いたスクリプトが実行されるのだ.
もちろん,コマンド履歴(history)にも保存されるので安心だ.
vimの機能が存分に使える.
ESC(エスケープキー)はいらない子
insert modeから抜けるのにESCキーを押すユーザーが存在すると思う.
今すぐにやめ,
ctrl [
を使おう.
普通ESCキーは一番左上に配置されていると思う.
こんなホームポジションからかけ離れたキーなんて押していられない.
ちなみに
ctrl c
でも似た動作をするが,微妙に動作が違うのでctrl [を使うようにしたい.
また,キーマッピングで他のキーに割り当ててもよい.
BSC(バックスペースキー)はいらない子
insert modeで左の文字を消したいとき,BSCを押すユーザーが存在すると思う.
今すぐにやめ,
ctrl h
を使おう.
普通BSCキーは右上に配置されていると思う.
こんなホームポジションからかけ離れたキーなんて押していられない.
ちなみにctrl hになれると,他のソフトでもこれで文字を消そうとしてしまう.
ソフトによってはHELPが表示され鬱陶しいことこの上ない.
(´・ω・`) < そんなにHELPを開いて欲しいのか...
(´;ω;`) < 苦労して書いたんだろうな...
AutoHotKey
Windowsを使っているのなら,AutoHotKeyを使おう.
AutoHotKeyをインストールし設定ファイルを作ろう.
^h::Send {Backspace}
これで煩わしさから開放される.
調子にのって他のソフトでもvimっぽい動作をさせようと,ゴリゴリ書いていると,
本当のvimの動作がおかしくなるのでほどほどにね.
tabキーはいらない子
tabキーはさほど押すのに苦労しないが,
あえて
ctrl i
で代用しよう.
意外と便利だったり?
(行の先頭に挿入のIと併用することが多いので,紛らわしかったり...)
タグを使おう
ctags -R *
で,そのディレクトリ以下のファイルをたどり,tagsファイルを作成してくれる.
:set tags=./tags
とかでタグをセットすると,そのタグが使えるようになる.
また,~/.vimrcに
set tags=./tags
とか書いておくと,その場所にあれば自動で読み込んでくれる.
タグジャンプで縦横無尽に飛び回れ
ctrl ]
これで,タグにひもづけられた場所へジャンプできる.
複数の候補がある場合は
g ctrl ]
で,複数の候補の中から選択できるようになる.
<number> ctrl ]
でも代用可能.
戻るときは
ctrl t
だ.
特にこのコマンドは,
ctrl o
ctrl i
としっかり区別して使った方が,思わぬ移動を防げる.
ちなみに
ctrl o
は移動する前にいた位置に戻る.
ctrl i
はctrl o に対するredo
ファイルへジャンプ
gf
go to fileっていう意味だろう.
カーソルのある場所のファイルを開く.
ヘッダファイルとかだと,あらかじめパスが通って入れば,
ヘッダファイルを開いてくれる.
もちろん,ヘッダファイルだけでなく,shell scriptでかかれたパスとかにも移動できる.
別の設定ファイルへのジャンプに便利だったり.
別ウィンドウで開きたいとき
これが一番紹介したかった機能.
ctrl w
これはウィンドウの操作に関連するコマンドで欲使われる.
これのすごいところは,他のコマンドとガンガン並用可能なところ.
例えば,
ctrl w ctrl ]
ctrl w gf
これ以外にも色々使える.
ちなみにデフォルトでは横分割.
デフォルトの補完機能を上手に使おう
補完候補を常に表示させる.
いやこれめちゃくちゃ便利.
チーズバーガー中毒: Vimで入力補完を常にオンにするvimrc[http://io-fia.blogspot.jp/2012/11/vimvimrc.html]
~/.vimrcに次のものを書き足そう.
set completeopt=menuone
for k in split("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_",'\zs')
exec "imap " . k . " " . k . "<C-N><C-P>"
endfor
imap <expr> <TAB> pumvisible() ? "\<Down>" : "\<Tab>"
通常の補完
ctrl p
ctrl n
これで補完を行う.
隣でwindowを開いていたりすると,そこのファイルからも補完を行えるようになる.
タブはどうだったかな?
特定の補完を行う
ファイルパス補完
ctrl x f
こいつの欠点は,
PATH=/usr/local/
とか入力したいときに現れる.
入力したいパスの前に=があると補完に失敗する.なんで?
愚痴
(´・ω・`) < マジ,めんどくさす
このせいでMakefileとかbash scriptとか書くとき,
すんごく面倒くさい.
対応策として,
"path"
のように"で囲んだり,一回改行してJやgJで詰めたりしている.
行補完
ctrl x l
意外と便利.
パスパターン補完
ctrl x i
インクルードファイルやインポートしたファイルとかから補完を行うモード
タグ補完
ctrl x ]
タグジャンプが ctrl ] だから連想しやすい.
(実は知らなくてあんまり使っていなかったことは秘密)
定義もしくはマクロ補完
ctrl x d
あんまり使わないな.
vimのコマンドライン補完
ctrl x v
その他の補完
- オムニ補完
- ユーザー定義補完
- スペリング補完
などなどあるが,別途ファイルを作る必要があるなど,ちと面倒なので使っていない.
使えば便利なんだろうけどねえ.
vimって実はファイラーでもあるんだよ
vimは簡易ファイラーとしても使える.
開き方は簡単で,
vim <directory>
と指定すれば良い.
current directoryを開きたければ.
vim ./
だ.
基本的な操作方法やヘルプへの入り方は,起動した時上の方に書かれている.
rangerほど高機能ではないが,:spや:vsとかと組み合わせて,別ウィンドウでディレクトリが見れる.
まあ,プラグインを入れればできることなんだけれど,デフォルトでも似たことは可能であるという意味で紹介したかった.
ウィンドウ系のコマンドと併用して他画面ファイラーとして使えたりするが,いかんせん機能がしょぼいのが難点.
欲しい機能
今のvimだと,:shでbashに入れるけど,
全画面でしか入れない.
- vimの隣のウィンドウだけbashにするとかできないのかな....
もちろん,プラグインは無しで.
- gitとの連携が簡単にできたらいいな...
もちろん,プラグインは無しで.
現在のところ,単なるクラウドドライブ扱いになっており,gitの意味がない.
:w |! git commit -am "great update by me"; git push origin master
このコマンドをctrl pでちょちょっと探して実行.
[参考文献]
- yamazakiccs--のもっさもさ感がたまらないブログ bash vi 最強ですね、わかります。[http://d.hatena.ne.jp/yamazakiccs/20081207/1216817670]
- Bashのコンソールで単語移動するショートカット[https://qiita.com/odacoh/items/b94be0deecaaa27b0263]
- チーズバーガー中毒: Vimで入力補完を常にオンにするvimrc[http://io-fia.blogspot.jp/2012/11/vimvimrc.html]