vim
cheetsheetじゃなくてcontentsの方がいい気がしてきた.
vim日本語ドキュメント: https://vim-jp.org/vimdoc-ja/usr_90.html vim-jp: https://vim-jp.org/docs/build_linux.html
ビルド
インストール
$ git clone https://github.com/vim/vim.git -b v8.2.0000
$ cd vim
$ ./configure --with-features=huge --enable-fail-if-missing
$ make && sudo make install
アンインストール
make uninstall
プラグイン(vundle)導入
$ git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
$ vim ~/.vimrc # head
+ set nocompatible
+ filetype off
+ set rtp+=~/.vim/bundle/Vundle.vim
+ call vundle#begin()
+
+ Plugin 'VundleVim/Vundle.vim'
+ ......
+
+ call vundle#end()
+ filetype plugin indent on
$ vim +PluginInstall +qall
vimrcの書き方
操作系
一応,dotfilesにcheetsheetがおいてあって,<c-h>で見れるようにしてあるけど,ほとんど意味がない. 何かあった時,(しばらくコード書いてなくて慣らしたいとか,キーボード変わってちょめちょめしてるとか) の時に雑に編集してみたりしてる. https://github.com/kawaharasouta/dotfiles/blob/master/configs/vim/cheatsheet.md
マジここ見た方がいいんじゃね的参照ページ https://www.ne.jp/asahi/hishidama/home/tech/unix/vi.html
以下メモ的な奴ら
tab空白
tab -> 空白
:set expandtab
:retab
空白 -> tab
:set noexpndtab
:retab!
helpの使い方
vimにはめっちゃ充実したオンラインドキュメントがついていて,これを活用しない手はないらしいから使おう.
### 基本的な使い方
:h [わかんないこと]
### 便利な使い方
:h [わかんないこと] | only // ウィンドウを分割しないで開く
:h // ドキュメントのトップページを開く
:h user-manual // ユーザマニュアル(リンクドキュメント)
:h howto // How-toリンク(リンクドキュメント)
:h index // 各モードのコマンド一覧らしい
参照
neovim
install
https://github.com/neovim/neovim/wiki/Installing-Neovim
$ sudo apt install software-properties-common
####################### $ sudo add-apt-repository ppa:neovim-ppa/unstable
$ sudo add-apt-repository ppa:neovim-ppa/stable
$ sudo apt update
$ sudo apt install neovim
$ sudo apt install python3-dev python3-pip
$ pip3 install -U pip3 # いらんかも
$ pip3 install neovim
$ sudo apt install xclip xsel
nvim開いて
:echo has('python3')
1
なるの確認しといた方が良さげ.
dein.vim
※なんかこれやったら/etc/alternatives/vimがnvimみるようになってビビったんだけど.
XDG系?の変数の定義
これに関してはneovimのインストール時にやった方が良さげな気はしてる.
$ vim ~/.bashrc
+ export XDG_CONFIG_HOME=$HOME/.config
+ export XDG_CACHE_HOME=$HOME/.cache
$ source ~/.bashrc
適当にechoして確認しとけ
init.vimの作成
$ mkdir $XDG_CONFIG_HOME/nvim
$ vim $XDG_CONFIG_HOME/nvim/init.vim
+ " dein.vim {{{
+ " directory configuration
+ let s:config_home = empty($XDG_CONFIG_HOME) ? expand('~/.config') : $XDG_CONFIG_HOME
+ let s:dein_config_dir = s:config_home . '/nvim/dein'
+ let s:toml_file = s:dein_config_dir . '/toml/dein.toml'
+ let s:cache_home = empty($XDG_CACHE_HOME) ? expand('~/.cache') : $XDG_CACHE_HOME
+ let s:dein_dir = s:cache_home . '/dein'
+ let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'
+ " dein installation
+ if !isdirectory(s:dein_repo_dir)
+ call system('git clone https://github.com/Shougo/dein.vim ' . shellescape(s:dein_repo_dir))
+ endif
+ " path
+ let &runtimepath = s:dein_repo_dir . "," . &runtimepath
+ if dein#load_state(s:dein_dir)
+ call dein#begin(s:dein_dir)
+ call dein#load_toml(s:toml_file, {'lazy': 0})
+ call dein#end()
+ call dein#save_state()
+ endif
+ " install new plugins
+ if has('vim_starting') && dein#check_install()
+ call dein#install()
+ endif
+ " dein.vim }}}
Neovimを再起動したらdeinが取得される. dein.vimのヘルプが↓のように見れたらOK.
:helptags ~/.cache/dein/repos/github.com/Shougo/dein.vim/doc
:h dein
hookの使い方とか
名前 |
実行のタイミング |
lazy OFF |
lazy ON |
---|---|---|---|
hook_add |
プラグインが追加されたとき |
OK |
OK |
hook_source |
プラグインが読み込まれる直前 |
NG |
OK |
hook_post_source |
プラグインが読み込まれた直後 |
NG |
OK |
hook_post_update |
プラグインが更新された直後 |
OK |
OK |
hook_done_update |
プラグイン全ての更新が終わった直後 |
OK |
OK |
プラグイン導入例
$ vim ~/.config/nvim/dein/toml/dein.toml
+ [[plugins]]
+ repo = 'itchyny/lightline.vim'
起動したら導入されるが,一部のプラグインで
:UpdateRemotePlugins
して再起動しないといけないものもあるみたい.
プラグインアンインストール
tomlファイルから該当行を消したあと,
:call map(dein#check_clean(), "delete(v:val, 'rf')")
:call dein#recache_runtimepath()
設定????
これ init.vim に入れないとコマンドが正しく動かなかった
" Define mappings
autocmd FileType denite call s:denite_my_settings()
function! s:denite_my_settings() abort
nnoremap <silent><buffer><expr> <CR>
\ denite#do_map('do_action')
nnoremap <silent><buffer><expr> d
\ denite#do_map('do_action', 'delete')
nnoremap <silent><buffer><expr> p
\ denite#do_map('do_action', 'preview')
nnoremap <silent><buffer><expr> q
\ denite#do_map('quit')
nnoremap <silent><buffer><expr> i
\ denite#do_map('open_filter_buffer')
nnoremap <silent><buffer><expr> <Space>
\ denite#do_map('toggle_select').'j'
endfunction
他にも公式の資料に設定の例とか書いてあるんだけどマジよくわからんからわからない.
denite.txt https://github.com/Shougo/denite.nvim/blob/master/doc/denite.txt#L127
vim pluginの作り方
※とりあえず細かい知識とか文法とか
pluginの作り方と言うか基本的にvim scriptに関して.
そもそもvim scriptはvimのExコマンド(:から始まるやつ)の集まりらしい.ただ,言語と呼ぶに差し支えない機能がしっかり備わってる. このファイルの基本的な実行には,:source [file name]をする.
$ vim sample.vim
+ echo "unko"
:source sample.vim
変数にはスコープがあるが,接頭子によって指定する. :h internal-variables
|buffer-variable| b: Local to the current buffer.
|window-variable| w: Local to the current window.
|tabpage-variable| t: Local to the current tab page.
|global-variable| g: Global.
|local-variable| l: Local to a function.
|script-variable| s: Local to a |:source|'ed Vim script.
|function-argument| a: Function argument (only inside a function).
|vim-variable| v: Global, predefined by Vim.
その他基本的な文法は https://knowledge.sakura.ad.jp/23436/ ここを見る随時ググれ.
ディレクトリ構成
[plugin]/
├── autoload
│ └── [plugin].vim
├── doc
│ └── [plugin].txt
└── plugin
└── [plugin].vim
pluginディレクトリ プラグインが提供するExコマンドやオプションを記述したスクリプトファイルをおく. メインの処理はautoloadに記述する.
autoloadディレクトリ メインの処理を記述したスクリプトファイルをおく. 配下のスクリプトファイルはvim起動時ではなくコマンド実行時に一度だけ読み込まれる. plugin配下から呼ぶことができる関数をautoload配下に定義する時、ファイル名#関数名()という命名規則に従う必要があります。これはpluginで定義したコマンドを実行する時にautoload配下のどのファイルのどの関数を呼べば良いのかを知る必要があるからです。そのため、プラグイン名が被るとautoload配下のスクリプトファイル名も被り、最悪違うプラグインの関数で上書きされる可能性があります。これがプラグイン名が被らないようにする必要がある理由です。
ヘルプファイルをおく.:helpでコマンドのヘルプを引けるようになる.