neovim
/
自分向け資料
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でハンドルする
-