vim
の後継機
概要
- vimの作者の開発の遅れとか、いろいろあって、vimのforkを行ったもの
- luaとの統合を推し進めており、vimscriptより簡潔で高速に動作することを目指している
- version 800から
cmdheight=0
が設定可能
私の.vimrc
ファイル構成
.vimrcに一つにまとまっているわけでなくて、以下のファイルに分割されている
~/.config/nvim/init.vim
~/.config/nvim/after/plugin/last.vim
~/.config/nvim/dein/lazy.toml
~/.config/nvim/dein/realtime.toml
~/.vim
またPlug
モジュールに依存しており、これは手動でインストールする必要がある
neovim
, vim
のよく使う標準機能の説明
termguicolorsとnotermguicolors
set termguicolors
- 24 bit color(true color)がサポートされており、GUIの色表現が利用できる
- 256色までの環境でこの設定を有効化してしまうと、ほとんど見えなくなる
set notermguicolors
- 256色までの色表現の時の設定に制限する時
vimを画面右端で折り返すかどうか
set nowrap
- 右端で折り返さない
set wrap
- 右端で折り返す
ノーマルモード
- 通常モードで編集できない
- ショートカットキーがこのモードで沢山割り当てられており様々な操作が可能
hjklとw,e,b
h
- 左へカーソルを移動
j
- 下へカーソルを移動
k
- 上へカーソルを移動
l
- 右へカーソルを移動
w
- 単語レベルで次の移動
wd
- 単語レベルで文字を削除
b
- 単語レベルで前の単語へ移動
f{char}
- ノーマルモードで
f{char}
{char}は任意の文字を入力するとその場所にジャンプする - 一文字しか取得できないのと複数行検索できないのでvimscriptで拡張できる
"! fコマンドの拡張
function FindChars()
let c0 = nr2char(getchar())
let c1 = nr2char(getchar())
let query = c0.c1
call feedkeys("/".query."\<CR>")
endfunction
nmap <buffer><silent> f :call FindChars()<CR>
- 二文字で検索できる +
n
,N
で次に進む、戻るができる
text object関連
text object
とは"hoobar"
,(foobar)
,<a tag>hoo bar</a>
などカッコや意味のある粒度で区切られた範囲である- neovimでは
c
から始まるコマンドが一部機能しないが、だいたいの操作はできる i
とa
オプションが存在し、i = inner
,a = a object
である%
はマッチオペレータといってカッコの粒度である
カッコ内を選択
vi"
で"hoobar"
の内側をビジュアルモードで選択va"
で"hoobar"
の"
を含めた全体の選択vi(
で(hoobar)
の内側をビジュアルモードで選択va(
で(hoobar)
のカッコを含めた全体の選択vit
で<a tag>hoo bar</a>
の内側をビジュアルモードで選択vat
で<a tag>hoo bar</a>
のカッコを含めた全体の選択
カッコ内を削除
vi"
で"hoobar"
の内側をビジュアルモードで選択va"
で"hoobar"
の"
を含めた全体の選択vi(
で(hoobar)
の内側をビジュアルモードで選択va(
で(hoobar)
のカッコを含めた全体の選択vit
で<a tag>hoo bar</a>
の内側をビジュアルモードで選択vat
で<a tag>hoo bar</a>
のカッコを含めた全体の選択
次のカッコへジャンプ
]%
でカッコ(")}>
)閉じへジャンプ[%
でカッコ("({<
)開始へジャンプ
マクロ
- 現在、カーソルが置かれている場所の単語を得ることができるマクロ
:echo expand("<cword>")
とすると今あるカーソルの単語がわかる- 日本語の単語区切りは連続するひらがなの塊か漢字の塊など、あまり正確ではない
- デフォルトのノーマルモードで
*
を入力するとでマッチした単語を検索する
インサートモード
- 編集できるモード
インサートモードでyankした内容を貼り付ける
<C-r>"
で匿名レジスタを貼り付ける
コマンドモード
- ノーマルモードで
:
を入力するとインラインコマンドモードになる - ノーマルモードで
q:
を入力すると履歴を表示した編集できるコマンドモードになる
:versionコマンド
- 現在のneovimのバージョンを得る
- neovimの場合、バンドルされているluajitの情報やコンパイルオプションを知ることができる
ビジュアルモード
- テキストや行が選択されてたモード
Shift+v
で行レベルで選択Ctrl+v
でcharレベルで選択y
で匿名レジスタにコピー- 匿名レジスタは
""
である
- 匿名レジスタは
"{char}y
で"{char}
レジストリにコピーする
まとめてコメントアウトする
Ctrl+v
で一文字だけ選択しビジュアルモードに入る- コメントアウトしたい行すべての先頭一文字を選択する
Shift+i
でビジュアルモードからインサートモードに遷移する- 代表の一行を編集し、
esc
でビジュアルモードを抜ける - ノーマルモードに戻った段階ですべての選択されていた行が編集される
ビジュアルモードで選択した範囲のuppercase, lowercaseを変更する
- ビジュアルモードで対象を選択
U
でアッパーケースに変換u
でローワーケースに変換
folding
特定の行を折りたたむ機能
zf
- ビジュアルモードに入ったら折りたたみたい行を選択し、折りたたむ
zo
- 折りたたまれた行にカーソルがあたった状態で、折りたたみが解除される
zc
- 一度折りたたまれたことがある行にカーソルがあたった状態で、再び折りたたまれる
zO
- すべて開く
zC
- すべて閉じる
zd
- 折りたたみを削除
zE
- 全ての折りたたみを削除
marks
ノーマルモードで、m{char}
を押すと、その行にそのキーのショートカットが作られる
`{char}
で、ショートカットが設定された行にジャンプできる
highlightした要素の置換
Shift+v
で選択したのち、:
を押すと:'<,'>
となっている- これに続けて、
:'<,'>s/hoo/bar/
とするとhooをbarに選択範囲のみのリプレースができる
最低限のインストール
ubuntu
$ sudo apt-get install neovim
$ sudo pip3 install neovim
$ sudo pip3 install pynvim
便利なPlugin
- dein.vim
- パッケージマネージャ
:call dein#install()
でtomlに記されたパッケージをインストール:call dein#update()
でtomlに記されたパッケージをアップデート
- vim-plug
- パッケージマネージャ
:PlugInstall
で.vimrc
に記されたパッケージを導入できる:PlugUpgrade
でvim-plug
のアップグレード:PlugUpdate
でインストールされているプラグインのアップデートvim-plug
自体のインストールは以下のコマンドsh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
- telescope.nvim
:Telescope find_files
-> fuzzyなfiler:Telescope symbols
-> fuzzyな絵文字入力
- treesitter
- vimの制約を越えた構文解析+ハイライト
- ale
- linter+fixer
- 非同期で未定義の変数などを指摘することなどが可能
- pylintモジュールがpythonに必要
:ALEInfo
でエラーが発生している場合、特定できる- 使用しないときは
:ALEToggle
でon/offの設定が可能
- jedi-vim
- 入力補完
- systemのpythonがあるところの定義を参照するので、pandas等を保管させたいときはsystemのpythonにもpandasをインストールする
- neovimでは
Plug
でのみ動作して、dein
では動作しなかった
- dein
- Pluginマネージャ
~/.config/dein
にパッケージを管理する
- Plug
- Pluginマネージャ
- インストールが早い
~/.vim
にパッケージを管理する
- vim-signature
- markしたポイントを左のスペースに表示する
カラースキームとテーマ
- gruvbox
- コントラストが低めの落ち着いたカラースキーム
自分でテーマを作成する
文字・背景の色を変更する
- background変数を設定する
:set background=light
:set background=dark
- normalの背景を設定する
:hi Normal ctermbg=0
:hi NonText ctermbg=0
トラブルシューティング
jedi-vimが動かない
- 原因
neovim
モジュールがインストールされていないpython
のパスは正しいくない:py3 print("foo")
でfoo
が表示されればpythonバインディングは動作しているはず
モジュールソースがduplicateしていると出る
- 原因
- 2つ以上のパッケージマネージャで同時に管理していると出る
- 対応
- 片方のパッケージマネージャのキャッシュをクリアすると直る
neovimのソースコードからのビルドができない
- どののパッケージが入っていればできるか明示されていないのでエラーログから読み取る必要がある
- debianだと
libtool libtool-bin cmake unzip gettext
が暗黙的に必要
^M
の文字コードがエディタ上で表示されるが、入力、操作できない
- 改行文字が一部変更された状態
\r\n
が変更され\r
などになった場合^M
と表示される- 直接
^M
のコントロール文字を入力してもファイル上の改行になってしまうので\r
でハンドルする