Vimの知見まとめとく
自分は vi 信者でもなければ emacs 信者でもない。どちらかというと IDE 至上主義者。
vim に関してはターミナル作業中にときどき使う。凝った設定は不要で、プラグインは使わないしカラーテーマもデフォルトで用意されてるものだけを使いたい。
無駄な設定なしで最低限使いやすい状態にしておきたい、というスタンス。
Mac では vi = vim
vi
コマンドは vim
コマンドへのシンボリックリンク。たまに alias を書いてる人がいるけど不要。
$ ls -l /usr/bin/vi lrwxr-xr-x 1 root wheel 3B 7 25 12:33 /usr/bin/vi@ -> vim
.vimrc に省略形は書かない
省略形で書くとこうなる。
set ts set sw set sts set tw
正しい名称はこちら。
set tabstop set shiftwidth set softtabstop set textwidth
省略形はエディタ上で臨時的に変更したいときに入力文字数が少なくてすむという機能。設定ファイルに記述するのは混乱するだけだし、重複して書いてるような人も多くて害が多い。
nocomaptible
はいらない
あらゆる .vimrc の冒頭に set nocompatible
と記述されているが vim
では標準で適用されているため不要。
書くといくつかの設定がリセットされるという副作用があるらしく書いてはいけない。
vimrcアンチパターン - rbtnn雑記
ペースト時に盛大にインデントがずれる件
noautoindent
する。smartindent
を有効にしてれば改行時には適切にインデントしてくれるため、実用面でも不便はない。
現在の設定
更新するにあたってひとつひとつがどんな意味をもつのか精査したので、とりあえずの完成形という感じ。
2016年11月のPython環境構築
Python で開発するわけじゃないけど、Hubot を使ったりするときにサーバ操作のための自動化ツールとして Fabric をつかうことになることが度々あり pip
が必要になったりする。
最近だと Google の人工知能ライブラリ TensorFlow を試すためにいれてる人も多そう。
改めて現時点のモダンな Python 環境構築手順をまとめる。
対象物
- Python 自体のバージョン管理のために
pyenv
- Python は標準の
Python.org
のものではなくAnaconda
またはMiniconda
- パッケージ管理ツールとして
pip
ではなくconda
- プロジェクト毎に Python 環境を変えるための
pyenv-virtualenv
は個人的に不要- 一般的には開発で Python3 使うけど Fabric 実行のために Python2 必要みたいなケース多いはず
- そういうときに入れればいい
- インストール対象
環境
- OS X El Capitan バージョン 10.11.6
インストール
pyenv
は Homebrew 経由でいれる。
$ brew install pyenv
設定
bash
を使ってる場合は .bash_profile
に追記する必要あるけど FishShell と fisherman
を使っているのでプラグインを入れるだけ。
$ fisher pyenv
インストール可能な Python 一覧
Python3 はリリースから 8 年経つらしいが後方互換性がないせいで、Python2 が今でも現役。最新は以下の通り。
新規開発なら 3 系を入れれば良いが、今回の目的の Fabric は 2.5〜2.7 しか対応してないため、2 系の最新をいれることにする。
pyenv
では標準の Python, Anaconda, Miniconda, PyPy, Stackless Python と 5 種類の Python をインストールできる。
$ pyenv install --list (略) 2.7.10 2.7.11 2.7.12 (略) 3.5.2 3.6.0b1 3.6-dev (略) anaconda2-4.0.0 anaconda2-4.1.0 anaconda2-4.1.1 (略) anaconda3-4.0.0 anaconda3-4.1.0 anaconda3-4.1.1 (略) miniconda2-3.19.0 miniconda2-4.0.5 miniconda2-4.1.11 (略) miniconda3-3.19.0 miniconda3-4.0.5 miniconda3-4.1.11
Anaconda と Miniconda の違い
公式のFAQ によると
What is Miniconda?
Miniconda includes conda, Python and a small number of other useful packages including pip, zlib and a few others.
ミニコンダは conda
と Python
と pip
と zlib
等を含んだ小さなパッケージという扱い。
何が入っているかはインストール後に conda list
で確認することができる。
conda list # packages in environment at /Users/jnst/.pyenv/versions/miniconda2-latest: # conda 4.2.12 py27_0 conda-env 2.6.0 0 enum34 1.1.6 py27_0 openssl 1.0.2j 0 pip 9.0.1 py27_0 pycosat 0.6.1 py27_1 pycrypto 2.6.1 py27_4 python 2.7.12 1 readline 6.2 2 requests 2.11.1 py27_0 ruamel_yaml 0.11.14 py27_0 setuptools 27.2.0 py27_0 sqlite 3.13.0 0 tk 8.5.18 0 wheel 0.29.0 py27_0 yaml 0.1.6 0 zlib 1.2.8 3
全部入りが Anaconda で、データサイエンティスト向けのパッケージが充実してるらしいけど自分は必要ないため、Miniconda をいれることにする。
Python2 系の最新をインストール
バージョン指定もできるが、末尾に latest で最新をいれる書き方もできる。
$ pyenv install miniconda2-latest
利用する Python 環境を変更
global
コマンドで設定。
$ pyenv global miniconda2-latest
利用中のバージョン確認
versions
コマンドでインストールされている環境一覧がわかる。
$ pyenv versions system * miniconda2-latest (set by /Users/jnst/.pyenv/version)
$ python -V Python 2.7.12 :: Continuum Analytics, Inc.
conda の使い方
まず conda
は pyenv
のように Python 自体のバージョン管理もできるが、pyenv
で管理する方が楽そうなので conda
はパッケージ管理マネージャのみとして利用することにする。
いろいろインストールして何かよくわからなくなったら pyenv uninstall <version>
すればキレイさっぱりと最初からやり直せる。
コマンド一覧の確認。
$ conda help
Fabric を探す。
$ conda search fabric
Fabric の最新をインストール。
$ conda install fabric
conda install fabric=1.11.1
のようなバージョン指定もできる。公式ドキュメントもわかりやすい。
Fabric が使えることを確認。
$ fab -V Fabric 1.11.1 Paramiko 1.16.0
zshは諦めてたけどfish shell導入したら捗った
エンジニア人生の中で zsh
を導入しようと数回思いたったことはあるのだけれど、毎回初期設定のひどさを見るたびに辟易して bash
でいいやと諦めていた。
コピペで機能追加できるとか言われても、自分の理解の範疇を超えてわけわからん状態になるのは耐え難いし、そこに学習コストをかけるモチベーションもない。
しかし最近になって Fish Shell=fish
という面倒がなく導入できて使い勝手もすこぶる良いものがあると知り導入することにした。
インストール
Homebrew でインストールできる。
$ brew install fish
プラグイン管理ツールのインストール
zsh では oh-my-zsh
, Antigen
, zplug
のようないくつかのプラグイン管理ツールがあるようだけど、fish では oh-my-fish と fisherman があり、fisherman の方がより洗練されているそうなので fisherman を使うことにする。
$ curl -Lo ~/.config/fish/functions/fisher.fish --create-dirs git.io/fisherman $ fisher -v fisherman version 2.9.0 ~/.config/fish/functions/fisher.fish
- fisher コマンドの使い方は
fisher -h
をみる - プラグインは http://fisherman.sh/ から検索できる
- 導入したプラグイン
- rbenv -
rbenv
の自動設定 - pyenv -
pyenv
の自動設定 - fzf -
peco
より高機能な対話的フィルタリングツールのfzf
の関数 - decors/fish-ghq -
Ctrl + G
でfzf
&ghq
の連携をしてくれる
- rbenv -
初期設定
デフォルトのシェルを bash から fish に変更する。
$ echo /usr/local/bin/fish | sudo tee -a /etc/shells $ chsh -s /usr/local/bin/fish
設定ファイル
bash では ~/.bash_profile
や ~/.bashrc
を設定ファイルとして使うが、fish では ~/.config/fish/config.fish
を編集する。
$ touch ~/.config/fish/config.fish
現状、このような記述にしている。
nodebrew
と golang
のプラグインはまだないようだが、ちゃんと探せてないだけだと思う。
見た目の変更
ローカル環境でサーバが起動しWebブラウザから設定できるようになる。
$ fish_config
各種設定
bash のときは ruby, node.js, golang の設定を書いているくらいだった。fish では config.fish
に書かなくても fisherman
でインストールすれば使えるようになるものもある。
以下は Ruby 環境用の rbenv
と Python 環境用の pyenv
の自動設定プラグイン。
$ fisher add rbenv pyenv
最高に便利なプラグイン
対話的フィルタリングツールとして peco
が有名だけど、同等以上に便利な fzf
を Mac にインストールした。
$ brew fzf
続いて fish で便利に使えるようにする fzf プラグインをインストール。
$ fisher add jethrokuan/fzf
これでキーバインディグが追加される(ただし Mac の場合は Alt + c
が ç
と入力されてしまうため、Esc キーを使ったり別途設定が必要)。
Ctrl-t
: カレントディレクトリ配下のすべてのファイルを自動補完Ctrl-r
: コマンド履歴から自動補完Ctrl-x
: コマンド履歴から自動補完して確認なしに即実行Alt-c
: カレントディレクトリ配下のすべてのディレクトリを自動補完して移動Alt-Shift-c
: カレントディレクトリ配下のすべてのディレクトリを自動補完して移動 (隠しファイル含む)
Go 言語を利用している場合は GitHub リポジトリの clone に ghq を利用している人が多いが、これも fish プラグインを使うことで便利なリポジトリ移動ができる。
fisher decors/fish-ghq
いろいろなオートコンプリートを追加
man ページを元に自動生成してくれる。git
コマンドでも ruby
コマンドでも何でも自動で追加してくれる。この仕組みはシェル界隈ではエポックメイキング的に便利な新機能のようだ。
生成ファイルは ~/.local/share/fish/generated_completions
に保存された。
$ fish_update_completions Parsing man pages and writing completions to /Users/jnst/.local/share/fish/generated_completions/ 2683 / 2683 : zic.8