深酒とお昼寝で忘れる

深酒とお昼寝で忘れる

素面でも意図したことを忘れがちなしらふいとさんは、忘れる前に何かしら書き残せたらとても満足のようです

重い腰を上げて Neovim ことはじめ ー Neobundle から Dein.vim への移行編

Vimプラグイン管理には Neobundle というプラグイン(パッケージ)マネージャのお世話になっており、これといって不満はないんです。ただ Neobundle はもうバグ修正しかしないようですし、いつかは他のプラグインに乗り換えるのかな(面倒くさい……)とは考えていました。そんな折に Neovim へ移行することにしたので、これを機に見通しの悪い .vimrc を含め設定ファイルを見直して整理して、さらに Dein.vim に移行してみました、というのが今回の内容です。話が横道に逸れますが、Vimプラグインマネージャが浸透し始めたのは 2010 年頃 のようで、自身も pathogen.vimVundle と使ってみて 2012 年の終わり頃から NeoBundle を使ってきました。変化の早さに驚くばかりです。

さて話を戻して、このトピックに関しては日本語の情報がたくさんあります。ここここここここここここ……(たぶんまだまだある)。これらの情報に加えて、SpaceVim の設定と、Dein.vim の作者である Shougo さんの 環境 を参考に設定してみました。なるべく複雑にしないことを目標に。

結果、このような構成になりました。

~/.config/nvim/
├── config
│   ├── dein.toml
│   ├── dein.vim
│   ├── dein_lazy.toml
│   ├── dein_local.toml
│   ├── init.vim
│   ├── main.vim
│   └── settings.vim
├── init.vim

init.vimconfig/main.vim を読み込み、この config/main.vim は同じディレクトリにある init.vimdein.vimsettings.vim を順に読み込む、という感じです。dein.vimdein.tomldein_local.toml(ローカルに保存してあるプラグイン)、dein_lazy.toml をそれぞれ dein#load_toml() します。

基本的には、SpaceVim の init.vim および config/init.vim をほとんどそのままコピーして、.vimrc 内のプラグインに関する記述を TOML ファイルに、残った設定を settings.vim に移行しました。TOML ファイル内で、プラグインのインストール情報(repo キー)と共に関連する設定を hook_* というキーでまとめて書いておけるのがすっきりして良いなと思ってます。

例えば、こんな感じ。

[[plugins]]
repo = 'ctrlpvim/ctrlp.vim'
hook_add = '''
    let g:ctrlp_map = '<Leader>cp'
'''

ちなみに hook に関する情報は ここ が詳しそうです。

まとめ。Neobundle から Dein.vim へ移行しました。次回は、新しく導入したプラグインの紹介編です。

重い腰を上げて Neovim ことはじめ ー Vim 環境の移行編

Neovim は Vim の未来だ ということで、そろそろ Vim 環境を Neovim に移行してみます。作業のモチベーションを上げるため、環境の移行に加えて、プラグイン管理を Neobundle から Dein.vim へ移行すること、および Neovim ニュースレターの 第6号 で紹介されている Neovim ならではの新しいプラグインをインストールすること、も目標にします。

まずは Neovim 本体を Homebrew でインストールします。

$ brew install neovim/neovim/neovim

Neovim への移行のための情報は :help nvim-from-vim から。基本的には下記で OK です。

$ mkdir ~/.config
$ ln -s ~/.vim ~/.config/nvim
$ ln -s ~/.vimrc ~/.config/nvim/init.vim

Neovim は XDG Base Directory Specification という仕様に従っているらしく、上記の ~/.config$XDG_CONFIG_HOME のデフォルト値のようです。ちなみにデータの類は $XDG_DATA_HOME である ~/.local/share に、キャッシュの類は $XDG_CACHE_HOME である ~/.cache に保存すると良いようです。

あとは vim コマンドの代わりに nvim を実行すれば Neovim が起動します。驚くほどスムーズに移行できました。気持ち Vim よりもさくさくしているような印象です。

今時のツールは自己診断なんかもできます。Neovim 内で :CheckHealth コマンドを実行すると環境に問題がないかをチェックしてくれます。Homebrew を使っている人にはお馴染の brew doctor にあたる機能ですね。PythonRuby の環境に問題あり、と診断されたので言われたとおりに下記を実行します。

Python 2:

$ brew install python
$ pip install neovim

Python 3:

$ brew install python3
$ pip3 install neovim

Ruby

$ brew install ruby
$ gem install neovim

再度 :CheckHealth したところ診断結果は良好のようです。

まとめ。Vim から Neovim へ移行しました。次回は、Neobundle から Dein.vim への移行編です。

/etc/hosts にワイルドカードは書けますか

書けません。

はじめに

仕事に集中したいけれどネットサーフィンをして時間を無駄にしてしまう……!そんなわけで /etc/hosts にこんなエントリを追加している人は意外に多いのではないかと思います。

127.0.0.1 www.facebook.com

そうやってどんどんエントリを増やしていくことになるわけですが、できたらこんな風に書けたら良いなあと思ったりしますよね。

127.0.0.1 *.jp

残念ながら /etc/hostsワイルドカードを書くことはできないようなので、代替手段を調べてみました。

Dnsmasq

どうやら Dnsmasq という(DNS forwarder 兼 DHCP server な)ものをインストールして設定すれば良いらしいです。早速やってみます。うちの環境は OS X El Capitan ですが、Linux でもある程度は同様に設定できると思われます。

インストール

$ brew install dnsmasq

Homebrew は本当に便利です。Linux で root 権限を持っていなかったりシステムを汚したくない場合は Linuxbrew を使ってみると良いです。

OS X の設定

OS に、全ての .jp リクエストの DNS lookup は Dnsmasq(127.0.0.1)に向けるように設定します。

(もしなければ)/etc/resolver というディレクトリを作成して、

$ sudo mkdir -p /etc/resolver

対象ドメイン(.jp)名のファイル、つまり /etc/resolver/jp に下記の行を追加します。

nameserver 127.0.0.1

Dnsmasq の設定

続いて Dnsmasq に、受け取った全ての .jp リクエストに対して 127.0.0.1 を返すように設定します。

設定ファイルの例(ちなみにこの設定ファイルを眺めてみると Dnsmasq でできることが色々と分かりそうです)をコピーしてきて、

$ sudo cp /usr/local/opt/dnsmasq/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf

下記の行を追加します。

address=/jp/127.0.0.1

起動

あとは起動すればおしまい。

$ sudo brew services start dnsmasq

まとめ

仕事しましょう。