Vimに慣れていない人へ。無理に使う必要なんてない

Windowsで育ってきた僕にとっては、Vimは意味不明なヤツだった。

無理にVimを使う必要なんてない。

エディタなんて好きなものを使えばいい。

選べる自由こそ最も尊重されるべき。

ただ、実際にVimを一定期間使ってから判断しても遅くないのではなかろうか。


僕がviだったかvimだったかに出会ったのは、初めてLinuxに触れたとき。

たしかFedora Core 6だったと思う。

意味不明だった。

なんで文字が入力できないの? え? aを押す?
おー。

意味不明だった。

編集終わった。保存したい。 え? <Esc>? :? wq? <Enter>
おー、、、、保存できたの?

意味不明だった。


Vimは慣れると病みつきになる中毒性の高いエディタだ。
しかし、初心者にとってNormalモードの存在意義は理解しづらい。

僕自身、Vimに初めて触れたとき、モードがあるのはきっとハード制約があったのだろうと思った。
そして、今もその名残りが残っているんだな。なんて古臭いエディタだ、と。

でも、違った。

Vimはテキスト操作の本質を突いている。

1. 目的の場所への移動
2. 目的の範囲の選択
3. 目的の操作

Normalモードはこれらの操作をスムーズに、そして繰り返し行う為に適したモードなのだ。

Vimのモード遷移を快適に行えるようになること。

それがVimを使う上でストレスを減らすために必要な第1ステップだと思う。

まずはEscキーの配置を変えることからはじめよう。

入門サイト

Vim初心者の方は、ひとまず下のゴリラさん連載をひと通り読むといいと思う。
GIFアニメ付きで読むだけでも分かりやすい。
Vimの基本操作と全体像がつかめると思う。

ただ、できれば実際に手を動かして試しながら読んでいこう。

チートシート

キーバインドをすぐ忘れるんだよなぁという人は、下のチートシートが使えるかもしれない。

本気でVim使いを目指す人へのオススメ書籍

Vim使いを目指すなら、まずは基本機能を使い倒そう。

僕自身まだまだなぁと思うことは多々あるけど、下の本は間違いなくためになった。

最後に

無理にVimを使う必要なんてない。

エディタなんて好きなものを使えばいい。

選べる自由こそ最も尊重されるべき。

ただ、もしかするとVimは、あなたの人生を狂わせるほど刺激的で、知れば知るほど愛おしい最高のパートナーになるかもしれない。

以上。

【FreeBSD】Neovimのインストールと設定ファイル

Vimか、Neovimか。 それが問題だ。

(言ってみたかっただけ)

つまらん概要は要らん、迷わずNeovim使うぞという人は「やること」へGo!

確認環境

   
PC Thinkpad X1 Carbon 2nd Gen
OS FreeBSD 12.1-RELEASE-p1
Neovim NVIM v0.4.3

Neovimとは?

NeovimはVimをリファクトしてスリムにしてメンテしやすくしようというプロジェクト。

以前はプラグインとの非同期連携と組込TerminalがNeovimの売りだと思ってたけど、
どちらも既にVimに実装されたっぽい。 (ただ、最近のVimを使ってないので詳細は分からんとです)

今でもVimに対して有利な点があるとすれば、以下の点かなぁと思う。

  • プラグイン開発に好きな言語が使える(APIがあれば)
    • API提供言語: C/C++, C#, Clojure, D, Elixir, Go, Haskell, Java, JavaScript/Node.js, Julia, Lisp, Lua, Perl, Python, Racket, Ruby, Rust
    • VimScriptが分からない人でも得意な言語で作れる ⇒ 開発者増加の期待
    • でもプラグイン開発言語のビルド環境や実行環境が必要になるデメリットがある
    • Luaを標準にしたいっぽい (かといってVimScriptを廃止することはない)
  • エディタとしてのコア機能とUIがしっかり分離されているっぽい

逆にNeovimの不利な点というより、個人的に不満なのは以下の点。

  • 何か調べたいとき、Vimより情報が少ない
    • とはいえ、Vimとほぼ共通でいけることも多い
    • プラグイン系の情報はちょっと少なめな印象
  • migemoでインクリメンタルサーチができない。ツラい
    • コマンドウィンドウを使った:Migemo検索ならできる
    • kaoriyaさんパッチのNeovim版、、、というよりプラグイン作ればいけるのかしら

Vimとの違いはこちらを確認されたし。
これからのNeovimが知りたい人は公式のロードマップを確認されたし。

次のバージョン0.5ではついにLSPクライアントが実装されるっぽい。
(本記事執筆時点ではnightlyリリースされてるっぽい)

やること

今回は、以下について説明する。

  1. Neovimのインストール
  2. Neovimの設定ファイル
  3. 設定ファイルの補足
    1. 設定ファイルを分割したい場合
    2. Vimと設定ファイルを共通化したい場合
    3. 複数の環境で設定ファイルを共通化したい場合

Neovimのインストール

以下のコマンドを打ち込むだけ。(管理者権限で実行してね)

> pkg install neovim

インストールが無事に終われば、nvimコマンドでNeovimを起動できるよ。

Neovimの設定ファイルの作成

Neovimと設定ディレクトリと設定ファイルは以下の通り。

Vim Neovim
設定ディレクトリ ~/.vim ~/$XDG_CONFIG_HOME/nvim
設定ファイル ~/.vimrc ~/$XDG_CONFIG_HOME/nvim/init.vim

環境変数$XDG_CONFIG_HOMEが未定義の場合、設定ファイルは~/.config/nvim/init.vimになる。

ササッと作っちゃおう。

> mkdir -p ~/.config/nvim
> touch ~/.config/nvim/init.vim

設定ファイル補足

設定ファイルを分割したい場合

設定ファイルが長くなってくると、複数のファイルに分割したくなるかもしれない。

僕の場合は、init.vimの他にキーバインド設定用を別ファイルに分けている。
各プラグインのキーバインドも含めてそのファイルに記述している感じ。

init.vimは他のファイルを読み込む処理しか書いてない人もいる。
自分が好きな方法で分割すればいいし、もちろん分割しなくてもいい。

ただ、設定ファイルの構成は最初に決めておいた方がいいと思う。
後からファイルを分割する場合、分割時にどこかミスって何か変になった!ってなるかも。

他の設定ファイル(VimScript)を読み込むコマンド

設定ファイルを分ける場合は、init.vimから下記のようにsourceコマンドで読み込む設定ファイルを指定すればいい。

source ~/.config/nvim/keymap.vim

他にも、runtimeコマンドを使う方法がある。
ワイルドカードが使えるので指定ディレクトリ以下の一括指定ができる。

runtime! myconfigs/init/*.vim

こちらはruntimepathに設定されているディレクトリリストから、指定のファイルを探す為、予めruntimepathをセットしておく必要がある。

runtimepathの設定値が知りたい場合は、:set runtimepath?で確認できる。

~/.config/nvimはデフォルトでセットされていると思う。

Vimと設定ファイルを共通化したい場合

基本的にNeovimにはVimと同じオプションがあると思っていい。
ないものはエラーが出るし、ヘルプも存在しないのですぐに気付くと思う。

ただ、VimとNeovimでデフォルト値が違うものは結構ある。
設定ファイルを共通化するなら各オプションは明示的に指定した方がいい。

Vimと設定ファイルを共通化している人は、下のようにリンクを貼って設定ファイルを共通化している人が多そうだ。
※既に.vim.vimrcがある人は削除なり移動なりさせて実行してね
$XDG_CONFIG_HOMEを定義してない人は直接パスを指定してね

> ln -s $XDG_CONFIG_HOME/nvim ~/.vim
> ln -s $XDG_CONFIG_HOME/nvim/init.vim ~/.vimrc

もし、NeovimもしくはVimだけでしか使えない設定がある場合、下のifで切り分ければOK。

if has('nvim')
    " Neovim用の設定
else
    " Vim用の設定
endif

もし、論理を反転したい場合は、hasの前に!をつければいい。

if !has('nvim')
    " Vim用の設定
endif

複数の環境で設定ファイルを共通化したい場合

OSによる分岐

if has('wsl')
    " WSL(Windows Subsisytem for Linux)
elseif has('win32')
    " Windows(32 or 64bit)
elseif has('unix')
    " UNIX系OS (FreeBSDもこれ)
endif

Neovimのマニュアルにはmacが無いけど、unixに含まれるのだろうか。
下のサイトさんでは使える雰囲気だけど、最新状況は不明...

ホスト名による分岐

if hostname()=='myhost'
    " ホスト名がmyhostのPC
else
    " その他のホスト名のPC
endif

インストール済みPythonによる分岐

if has('python3')
    " Python3系インストール済み
elseif has('python2')
    " Python2系インストール済み
endif

if has('pythonx')
    " 何れかのバージョンのPythonインストール済み
else
    " Python未インストール
endif

特定のコマンドが使用可否での分岐

if executable('rg')
    " rgコマンド実行可能
else
    " rgコマンド実行不可
endif

パスの設定

諸々のパス指定では、環境変数を活用したりVimScript変数に代入しておいた方が共通化しやすいかもしれない。

if has('unix')
    let g:my_file=expand("$HOME/my/path/.file")
elseif has('win32') || has('win64')
    let g:my_file=expand("$HOME/my/path/_file")
endif

ただ、オプション設定のsetでは展開されないっぽいので注意。
下のようにすればいい。

let s:my_undodir=expand("$HOME/nvim/undo")
set undodir=s:my_undodir    " これだと's:my_undodir'という文字列が設定される
let &undodir=s:my_undodir   " オプション名に&をつけてletすればOK

最後に

ひとまずこれで、Neovimが起動できて、設定するファイルも分かったと思う。

使い方については、こちらの戯言で紹介したサイトさんや本を参考にして頂きたい。

次回は、最低限やっておきたい設定をざっくり紹介しようと思う。

参考

以上。

【書籍】やり抜く人の9つの習慣 コロンビア大学の成功の科学

今回ご紹介するのはこちらの書籍。

やり抜く人の9つの習慣 コロンビア大学の成功の科学

やり抜く人の9つの習慣 コロンビア大学の成功の科学

イントロダクション

「シロクマのことだけ考えてはいけない」

こんな要求をされると、考えてもいなかったシロクマが頭から離れなくならないだろうか?

本書では読者に身近な例を用いながら、目標達成のために心理学的に有効で、すぐに試せる具体的な方法を提案してくれる。

本書を薦める対象者

  • 目標を立てっぱなしにしちゃう人
  • 自分の能力に自信が持てない人
  • やめたい習慣がある人

内容のご紹介

本書は、目標達成の為に必要なこと、避けるべきことを、心理学的な観点からまとめた本です。

本書の構成は、下記となっています。

 第1章 目標に具体性を与える
 第2章 目標達成への行動計画をつくる
 第3章 目標までの距離を意識する
 第4章 現実的楽観主義者になる
 第5章 「成長すること」に集中する
 第6章 「やり抜く力」を持つ
 第7章 筋肉を鍛えるように意志力を鍛える
 第8章 自分を追い込まない
 第9章 「やめるべきこと」より「やるべきこと」に集中する

目次だけ見ると、他の啓発本で見たことがあると感じる人もいるかもしれません。

しかし本書の特徴は、主張や根拠が明瞭であり紙本で120ページとコンパクトにまとまっていることです。

各章の構成は基本的に下記のようになっています。

  • 主張したいこと(問題点と対策)
  • その動機となる例
  • その根拠となる心理学実験の紹介
  • 章のまとめ

短く読みやすいので、多くの人は各章を読むのに10分もかからないでしょう。
もし主張だけ確認したいなら、各章のまとめを読むだけでも十分です。

新年を迎えて新しい目標を立てたという方も多いかと思います。

目標に立ち向かう前に、今のあなたのやり方が心理学的に有効なのか本書で確認してみてはいかがでしょうか?

感想など

本書の内容はスッと頭に入ってくるように感じた。

なぜ本書は読みやすいのだろうか。

それはきっと無駄にダラダラと説明しないからだ。

一部の啓発本では、主張に説得力を持たせるために、観測範囲の狭い著者の経験談を次々に出して説得を試みようとする。

しかし、本書では心理学研究者としての根拠を示すだけだ。
それはもうこんな実験結果で証明されていますよ、というスタンス。

そして、多くの人が共感しやすい身近で具体的な例を用いる。

「シロクマのことだけ考えてはいけない」

こんな要求をされると、考えてもいなかったシロクマが頭から離れなくならないだろうか?

本書では読者に身近な例を用いながら、目標達成のために心理学的に有効で、すぐに試せる具体的な方法を提案してくれる。
(ちなみにシロクマの例は、第9章「やめるべきこと」より「やるべきこと」に集中する に出てくる)

最近、やめたい習慣がいくつかあったので、特に7章以降の意思力と代替if thenプランの話は参考になった。

今の目標が達成できるか不安な人や、意思が強ければ目標は達成できると考えている人は、1度本書に目を通して損はないと思う。

紙本よりKindle版が安いのでお得。

やり抜く人の9つの習慣 コロンビア大学の成功の科学

やり抜く人の9つの習慣 コロンビア大学の成功の科学