Vimのコマンドまとめを作ってみた
仕事で、一日中使うってわけでもないけれども、Vimをちょいちょい使うようになって、はや一年。
コマンド自体や、やりたいことの名称を知っていればhelpも引けるんだけど、存在を知らないまま、使わずにいる機能ってたくさんあるんだなぁーと、実感することが多いです。
こんな機能あったんだって(自分にとって)発見だったことや、たまにしか使わないから忘れてしまってすぐ毎回ぐぐるコマンドだなーとか、そーゆーものをまとめてみました。
同等機能で、もっと便利な別のプラグインがあるよって場合もあるかとは思いますが、基本的にはデフォルトのvimで使えそうなものに絞りました。
さっそく、vimの起動から!
Vim起動
個人的に、おお!これあったんかい!って感動したヤツは、ssh越しでファイルが編集できる起動方法です(もうひとつは、Exploreでの起動)。
(シェルの)コマンド | 意味 | 補足 |
---|---|---|
$ vim |
Vimよ、立ち上がれ | |
$ vim -R file |
readonlyで起動 | 消しちゃいけないファイルをうっかり消さないために・・・。 |
$ vim - |
標準出力の結果を取り込んでvimが立ち上がる | シェルでなんかのコマンドの出力を受けたりできる |
$ vim . |
Vimでファイルブラウズします。 | カレントディレクトリに日付ファイルがだらだら並んでいて、シェルのファイル名補完が微妙に使いにくい場合にかなり重宝する。さらに詳しくは:Explore へ |
$ vim file1 file2 ... |
複数のファイルを編集する | こうやって起動しても、1つのウィンドウで1つのファイルの編集が始まるだけですが、:args にファイルのリストがあるよ。 |
$ vimdiff file1 file2 |
二つのファイルでdiffをとりつつ起動する | :diffs とフォールディングを参照。 |
$ vim -q fixfile |
quickfixで開きます | この直後は特になにも変化ないけど、:copen でリスト開けます。 |
$ vim scp://[user@]host/path/filename |
ssh越しにファイルを編集する | userとかhostとかは適宜読み替えください。ちなみに、ルートにアクセスしたければ最後はhost// とスラッシュが2つ。 |
Vim起動直後のこまったとき編
よくあるのは、文字コードが違って読めないので、別の文字コードで開きなおしたい。ついでに、文字コードをutf-8に変換したい。インデントぐちゃぐちゃなので、直したい(保存するかはともかくとして・・・)。の3パターンかなーと思います。
コマンド | 意味 | 捕捉 |
---|---|---|
:e ++enc=utf-8 |
指定した文字コードで開き直す | |
:set fileencoding=utf-8 |
指定した文字コードに | 文字化けしてない状態で使って、自分はこの文字コードで保存したいんや!というやつ |
== |
インデントなおす | gg V G == みたいな感じで全部選択してやるといい感じになる(ことが多い)。 |
:Explore
あるファイルを編集しようとして、誤ってディレクトリを指定して起動してしまって、「あああああディレクトリをvimで開いちゃったーとほほ→:q
」と何百回とやったことか・・・。その画面で、カーソルを移動して、ファイル名の上でEnter
を押せば、そのファイルが編集できる(個人的にもっと早く気がつきたかった機能No.1)
コマンド | 意味 | 補足 |
---|---|---|
:Explore |
ファイラーを開きます | |
:e . |
同上 | :e file で編集開始だと知っていれば、Vim起動のvim .の同じ組み合わせ |
:Sexplore |
スプリットなExplore. | ウィンドウ操作は、ウィンドウ操作編へどうぞ |
:Vexplore |
:Secplore すると、水平分割ですが、これは垂直に分割されます。 |
同上 |
Exploreの画面の操作は、ファイル編集のときと同じように移動(もちろんjk)スクロール・検索ができますし、QuickHelpにも書いてありますが、sを押せば、名前・サイズ・時間で並べ替えできます。詳しくは、ヘルプ読みましょう。*1
追記 ここから
注で「ファイルを誤って開いたあとに、ちゃっと戻る方法ってないんですかね・・・」と書いていたのですが、発見したので、書き残しておきます。
Ctrl-6
またはCtrl-^
です。
正確には:e #
。で、Ctrl-O
とかも検討したのですが。ただし、MacのTerminalだと、Ctrl-6
がVimまで届かなくて、何かのショートカットで取られてるみたいです。
ここまで
:args
起動時に渡した引数は、":args"でみることができます。
コマンド | 意味 | 補足 |
---|---|---|
:args |
一覧表示だよーん | []で囲まれているものが、現在編集中のもの。 |
:next |
つぎのファイルに移動するよーん | 反対は:previous |
:previous |
前のファイルに移動するよーん | 反対は:next |
:first |
先頭のファイルに移動するよーん | |
:last |
最後のファイル |
あるファイルを編集して、保存せずに移動しようとすると、怒られます。保存して移動は、:w
して:next
としてもよいですが、:wnext
みたいなコマンドがあります。破棄して移動は、:next!
です。
:diffs[plit]
vimdiff file1 file2
で開くこともできますが、画面分割でvimから開くこともできます。
コマンド | 意味 | 補足 |
---|---|---|
:diffs file |
水平分割でvimdiffします | |
:vertical diffs file |
垂直分割します |
ウィンドウの操作は、「ウィンドウ操作」のところへ。
畳み込みが(たぶん)現れるので、「畳み込み」へ。
畳み込み
僕はほぼ使わないので、現れるのは、vimdiffしたときぐらいで、開けるためのza
と全開のzR
しか覚えていない・・・。
ヘルプは、:help fold-commands
。
アンドゥ/リドゥ
コマンド | 意味 | 捕捉 |
---|---|---|
u |
アンドゥ | |
U |
アンドゥ | 一行まとめて |
CTRL-R |
リドゥ | |
g- |
戻る | |
g+ |
進む | |
:undol[ist] |
undotreeを表示する | 詳しくは、下のサイトを参照。 |
ファイルごとにundoとかの履歴を残すことができます。
Undoを管理する - Qiita
もう一回やる系(?)
コマンド | 意味 | 捕捉 |
---|---|---|
gv |
さっきやった選択やり直し | 一回囲んでコマンドラインモードを間違えて、全キャンセルしたあととかに、gvしてやり直す。 |
gi |
もう一回同じところでインサートモードで入り直す | |
q: |
コマンドラインモードの過去の履歴がみれるので | :history でもいいけど、これは表示するだけ。 |
q/ q? |
検索履歴をみる。/と?の違いは、前方/後方検索 | http://nanasi.jp/articles/howto/editing/use-command-history.html:history / で表示するだけ |
(:history
は、一度ちゃんと把握しておきたい・・・。)
あと、頭にg
がつくものは、Vim の g で始まるコマンドというかキーマップの一覧 - Blank Fileにまとめがありました(多謝)。
ウィンドウ操作
コマンド | 意味 | 捕捉 |
---|---|---|
:split |
水平分割 | |
:vsplit |
垂直分割 | |
CTRL-W CTRL-W |
ウィンドウ間を移動する | これを連打すれば、いつかは望んだウィンドウへ行ける・・・ |
CTRL-W j |
指定した方向のウィンドウへ移動する | j をk l m にかえれば、方向がかわります |
CTRL-W CTRL-R |
隣接ウィンドウを交換する | |
CTRL-W J |
指定した方向のウィンドウと交換する | J をK L M にかえれば、方向がかわります |
CTRL-W = |
ウィンドウの幅/高さを等分 | |
CTRL-W + |
ウィンドウの幅/高さを変える | 1回実行ごとの1つずつ(なので、いい感じの回数を頭につける)。+ を- < > にかえれば、高さ方向だったり幅方向だったり変わる。 |
CTRL-W _ |
ウィンドウの幅/高さを最大化 | 縦ボーに買えたら幅の方向です。 |
スクロール
ただ単にスクロールするだけなら、画面半分ずつ移動するのがなんとなく好きで、CTRL-U
とCTRL-D
だけしか使ってないような気がする・・・。yとeがいまいち覚えられない・・・。
スクロールの幅 | 上へ | 下へ |
全部 | CTRL-B (Backward) |
CTRL-F (Forward) |
半分 | CTRL-U (Up) |
CTRL-D (Down) |
1行 | CTRL-Y |
CTRL-E |
もうひとつは、見やすい位置にもってくる(つまりカーソルの場所は動かさないで、真ん中にスクロールする)zz
。他のコマンドをよく忘れる。これはtopとbottomなので、まだ覚え易いけど・・・。
カーソルの位置を上(Top)zt
へ。中央(?)zz
、下(Bottom)zb
になるようにスクロール。
ジャンプ
人類はもっとvim本来の機能を使うべきだった - うどん よこみち ここがめっちゃ親切にまとめてくれています。
コマンド | 意味 | 捕捉 |
---|---|---|
:ju[mps] |
jumplistを表示する | |
CTRL-O |
きほんのジャンプ | 過去にジャンプした場所に戻りたかったら、これを雰囲気で連打 |
CTRL-I |
きほんのジャンプ | |
:tags |
タグスタック一覧表示 | タグジャンプ関連 |
CTRL-T :pop |
||
:tag |
make/quickfix/vimgrep
qucikfixリストは、makeがあればmakeと実行のところに書いてあるコマンドで作ることができます。
さらに、vimgrepでも作られるようです。vimgrepは、ファイルを横断して、ジャンプする候補を表示してくれるコマンドさんです。
コマンド | 意味 | 捕捉 |
---|---|---|
:make |
qucikfixリストができます | 実行は:make run 。 |
:vimgrep // {} |
リスト生成する | //は正規表現の部分。{}は範囲を指定します(* とかやると全部のファイルが対象) |
:vimgrepadd // {} |
既にあるリストに追加する |
quickfixリストの操作方法は、
コマンド | 意味 | 捕捉 |
---|---|---|
:copen |
開きます | 上でエンター押せば、そこにジャンプする |
:cclose |
閉じます | |
:cn[ext] |
リストの順番で、次の場所にジャンプします | |
:cp[previous] |
リストの順番で、前の場所にジャンプします |
タグジャンプ
雑な使い方の説明
$ ctags filename #ファイルを指定した場合 $ ctags -R * #再帰的にファイルを全部指定した場合
みたいな感じで、tagsのファイルを作っておく。...力つきた(ぱたり
*1:ファイルを誤って開いたあとに、ちゃっと戻る方法ってないんですかね・・・
最近気になってること(2016年12月アップデート版)
自分のアンテナをどっちへむけてはるか確認するという意味で、わりと役にたっている気がするので、定期的に更新しています。
- インフラ?
- フロントエンド
- HTML5 & CSS3(『HTML5/CSS3モダンコーディング』)
- JavaScript自体(『JavaScript本格入門』『パーフェクトJavaScript』)
- JavaScriptパッケージ jQuery Vue.js D3.js C3.js leaflet.js
- SCSS
- 開発関係
- ハッカーと画家(再読)
『UNIXという考え方』『情熱プログラマ』『How google works』- 『Team Geek』
『リーダブルコード』『よいコードを書く技術』『コーディングを支える技術』『エクストリームプログラミング』『アジャイルサムライ』『スクラムブートキャンプ』- 『Java言語で学ぶリファクタリング入門』
- 『Java言語で学ぶデザインパターン入門』
- 『リファクタリング』(Martin Fowler)
- UMLとか?
- エディタ:vim/eclipse
- lintツール flake8/jshint
- codestyleチェック flake8 pydocstyle/jscs
- デバッグツール(gdb pdb)
- ユニットテスト(『JUnit実践入門』, unittest)
- ドキュメント生成ツール(『Sphinxをはじめよう』, docstring, YUI doc)
- バージョン管理システム git/github
- ビルドツール make/Gulp/ant
- CI(Jenkinsおじさん)
- 統計/機械学習
matplotlib.use('Agg')するときの注意点
GUIがない環境で
_tkinter.TclError: no display name and no $DISPLAY environment variable
みたいなエラーに遭遇した。
ぐぐると、backendの設定をAgg
にすればよい的な回答があった。
(普段はmatplotlibrc
に設定してあるんだけど、ちょっと別環境だったので・・・)そういえば、そうだったと思い出したところまでは、よかった。
けど、少しハマってしまった。ちゃんとつぶさに読めばよかったんだろうけど、順番なんて気にしていなかったのが敗因。
import matplotlib import matplotlib.pyplot as plt matplotlib.use('Agg')
はダメで、
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt
で、OK. pyplotが呼ばれる(importされる?)前に、matplotlib.use('Agg')
をしないといけないところが要注意。
こう書いちゃうと、E402 module level import not at top of file
で、flake8に怒られてしまう・・・。
参考
最近気になってること(2016年5月アップデート版)
自分のアンテナをどっちへむけてはるか確認するという意味で、わりと役にたっている気がするので、定期的に更新しています。
- web関係
- CentOS 7 (systemctlとかNetworkManagerとか。『CentOS7で作るネットワーク構築ガイド』)
サクラのVPS借りたい- webサーバ(nginx 『nginx実践入門』)
- Gunicorn
- webフレームワーク (Django/flask jsp/サーブレット)
- HTML5 & CSS3(『HTML5/CSS3モダンコーディング』)
- JavaScript(『JavaScript本格入門』『パーフェクトJavaScript』jQuery Ajax React.js D3.js C3.js)
- 開発関係
- ハッカーと画家(再読)
『UNIXという考え方』『情熱プログラマ』『How google works』- 『Team Geek』
『リーダブルコード』『よいコードを書く技術』『コーディングを支える技術』『エクストリームプログラミング』『アジャイルサムライ』『スクラムブートキャンプ』- 『Java言語で学ぶリファクタリング入門』
- 『Java言語で学ぶデザインパターン入門』
- 『リファクタリング』(Martin Fowler)
- UMLとか?
- ユニットテスト(『JUnit実践入門』, unittest)
- ドキュメント(『Sphinxをはじめよう』, docstring)
- CI(Maven?, Jenkins?, Travis CI)
- VCS(git)
- vim/eclipse
- ぶん回す系
- その他プログラミング
- 統計
- 岩波データサイエンス vol.1
- 岩波データサイエンス vol.2
- その他
- PyConJPの過去動画を見る
最近気になってること(2016年3月アップデート版)
(3月10日追加修正)
(3月21日追加修正)
- web関係
- CentOS 7 (systemctlとかNetworkManagerとか。『CentOS7で作るネットワーク構築ガイド』)
サクラのVPS借りたい- webサーバ(nginx 『nginx実践入門』)
- Gunicorn
- webフレームワーク (Django/flask)
- HTML5 & CSS3(『HTML5/CSS3モダンコーディング』)
- JavaScript(『JavaScript本格入門』『パーフェクトJavaScript』jQuery Ajax React.js D3.js)
- 開発関係
- ぶん回す系
- 急がないけどやっておきたい
- 統計
- 岩波データサイエンス vol.1
- 岩波データサイエンス vol.2
- 読みたい
- ハッカーと画家(再読)
VPS作業記録9
前々回の課題であったGunicornやらuWSGIってなんぞやというところは、未だによくわかってないのですが、
このスライドを読んだところ、
speakerdeck.com
「Gunicornはシンプル、uWSGIは多機能」とのこと。
僕は、おそらく複雑な設定は必要ないので、シンプルなGunicornを使用する方向に、とりあえずは決めました。
http://gunicorn.org/:embed:ctite
もとはRubyな動物だった。