Vim

Mon, Nov 20, 2023

VimConf 2023 Tinyに行ってきた

2023年11月18日、秋葉原で開催されたVimConf 2023 Tinyに参加してきました。 https://vimconf.org/2023/ VimConfが4年ぶりに帰ってくる! VimConf は、世界初かつ世界で唯一のコミュニティによって定期運営されているVimの国際カンファレンスです。 新型コロナの影響で開催を延期していたVimConfが、2023年ついに開催決定! 今回は、準備期間が限られているため、VimConf 2023 tinyとして縮小版での開催となりますが、 Vimに関する様々なセッションが予定されています。 Vimユーザーなら誰でも楽しめるVimConf 2023 tiny。 Vimをもっと使いこなしたい方、Vimについてもっと知りたい方は、ぜひご参加をご検討ください! 初めてのVimConfの参加でちょっと緊張していたのだけれど、とても楽しかった。 ありすえさんがtogetterにまとめてくれているのでそれ見ながら思い出しつつ書いていきます。 https://zenn.dev/lambdalisue/articles/67f532581548b6 Bram Moolenaar the Creator of Vim (mattn) Bram Moolenaar the Creator of Vim (mattn) - Togetter Vimの歴史やVimの作者Bramさんとmattnさんの二人のエピソードをSoftware Designのスピンアウトという形でお話されてました。 自分も、Bramさんがこの世を去ったと知ったときとても悲しい気持ちになったのを覚えている。 このキーノートでmattnさんも感情をなんとか抑えながら話していて、聞いている自分も気持ちを抑えながら聞いていました。 印象的だったのはBramさんはあのmattnさんから見ても手が早かったこと、英語がコンプレックスだったmattnさんのターニングポイントがBramさんとのメールのやりとり、それがOSSへの貢献につながっていること。 そして、今後mattnさんはずっとVimを使いつづけ、メンテナンスしていくんだという意志表明があり、良い基調講演でした。 Revolutionizing Vim/Neovim Plugin Development ~ An In-Depth Look into Denops (Λlisue) Revolutionizing Vim/Neovim Plugin Development ~ An In-Depth Look into Denops (Λlisue) - Togetter 開発者のありすえさん自身が、Denopsについて解説するトーク。 特にDenopsのアーキテクチャそれらの通信がどうなっているのか、プラグイン間の通信あたりが個人的に面白かった。 Vim / NeoVim <–> denops のやりとりはそれぞれJSON/MessagePackでやりとりし、denops <–> plugin は messagepack-rpc でやりとりしている。
Tue, Apr 30, 2019

tig-explorer.vimの使い方

Vim用のGitクライアントが欲しかった vimのGitプラグインとして何を使っているのが多いだろうか? 自分の観測範囲ではfugitiveを使っている人が多いようだ。 しかし、ターミナルではCUIツールで高速なプレビューの出来るtigをGitクライアントとして利用している人は多いのではないだろうか。 vimでもtigが使いたい。そんな人(自分)のためにvim pluginを作成した。 tig-explorer.vim tig-explorer.vimはtigをvimから扱うプラグイン。 tigの機能でdiff上からeキーを押下すると任意のエディタで該当箇所を開く事が出来るが、このプラグインを使うと、vimからtigを呼び出すことが出来る。 tigを開き、差分をチェックして、そこから再びvimで開くことが出来る。 また、vimからtigを呼び出すには!tigコマンドをvimのコマンドモードから呼び出すことでも同じことが実現でも可能だが、 プロセスがvim-tig-vim-tig-vimのようにどんどんネストしてしまう。 このプラグインを経由してエディタで開く場合は親のvimプロセスで開くため、vim上のbuffer移動やhistory、yankが途切れることがない。 また、vimからtigに行番号やファイル名を渡せるので、↓のコマンドが格段に扱いやすくなる。 tig FILEPATHで閲覧中のファイルの履歴を見る(:TigOpenCurrentFile) tig grep PATTERN PATHでプレビューしてから開く(:TigGrep) tig blame FILEPATHで現在のファイル履歴を行単位で見る(:TigBlame) tig-explorer.vimのカスタマイズ .vimrcの記述例 " tigを開くnnoremap <Leader>t :TigOpenProjectRootDir<CR>" 現在のファイルの履歴を見るnnoremap <Leader>T :TigOpenCurrentFile<CR>" パターンでtig grepするnnoremap <Leader>g :TigGrep<CR>" tig grepした内容を再呼び出しするnnoremap <Leader>r :TigGrepResume<CR>" 選択中のキーワードでtig grepするvnoremap <Leader>g y:TigGrep<Space><C-R>"<CR>" カーソル下のキーワードでtig grepするnnoremap <Leader>cg :<C-u>:TigGrep<Space><C-R><C-W><CR>" 現在のカーソル位置でtig blameするnnoremap <Leader>b :TigBlame<CR>また、このプラグインの特徴的なところでtig上でCtrl-tを押下するとvimのタブで開く機能が追加されている。 同様にCtrl-sで水平分割、 Ctrl-vで垂直分割出来る。 tig上のvimを開くキーバインドの動的に追加していて、下記がデフォルトの設定値。 let g:tig_explorer_keymap_edit = '<C-o>'let g:tig_explorer_keymap_tabedit = '<C-t>'let g:tig_explorer_keymap_split = '<C-s>'let g:tig_explorer_keymap_vsplit = '<C-v>'↑ .
Sun, Sep 2, 2018

ranger-explorer.vimをアップデートした

ranger-explorer.vimというVimプラグインをアップデートした。 このアップデートでranger上の操作でVimのタブで開くか画面分割して開くかを選択できるようにした。 (あとNeovimもサポートした) ranger-explorer.vim https://github.com/iberianpig/ranger-explorer.vim Vimのファイラのrangerに置き換えるVimプラグイン。 Vimからrangerでカレントディレクトリを開いたり、プロジェクトルートのディレクトリを開いたりできる。 また、Vimのプロセスがネストせず、rangerの親プロセスのVimで開くようにしているのでbufferを共有することが出来る。(これが!rangerで開いた時との違い) 今回のアップデートでは rangerから Vimのタブや画面分割で開いたり出来るようにしている。 ranger rangerはCLIベースの高機能ファイラで、コマンドラインから操作できる。 hjklの移動、yyのヤンク、ddのカット、pのペーストなどVimライクな操作や、コマンドラインでの:rename、:touchなどの操作がサポートされている。 特に高速なライブプレビューが気に入っており、これだけでrangerを選択するモチベーションになっている。 rangerからタブ/画面分割で開く ranger-explorerからrangerを開いた時、Vimを開くキーバインドがrangerに自動で定義されるようにした。 <Ctrl-o>: 現在のタブ上で開く <Ctrl-t>: 新しいタブで開く <Ctrl-v>: 画面を垂直に分割して開く <Ctrl-s>: 画面を水平に分割して開く このようにrangerから分割して開くことが出来る。 動的にrangerへキーバインドを注入しているので、CLIからrangerを開いた時はこれらのキーバインドは使えず、ranger-explorerから開いた時のみタブや画面分割が出来るようになる。 また、動的にアサインするキーバインドは ~/.vimrc で下記のように上書きできる。 let g:ranger_explorer_keymap_edit = '<C-o>'let g:ranger_explorer_keymap_tabedit = '<C-t>'let g:ranger_explorer_keymap_split = '<C-s>'let g:ranger_explorer_keymap_vsplit = '<C-v>'得意なツールに任せる 無理に全てVimプラグインで頑張るよりも得意なツールを使えば良いと考えていて、 今回の場合はディレクトリ構造を扱うのが適したツールのrangerに任せている。 特にファイルを開いたり、検索する部分は外部のCLIツールを利用している。 fzf.vim ファイル名をあいまい検索(fuzzy-finder) ranger-explorer.vim ディレクトリ階層からファイルを選択 tig-explorer.vim tigでGitの履歴から、git grepからファイルを開く どれもプレビューが高速なツールなのでVimからファイルを探すワークフローが快適になった。 異なるツールの操作に一貫性を持たせる Vimに外部ツールを利用する場合はパフォーマンスの利点もあるが、普段から使い慣れているツールを扱えるということが利点。 しかし、当然ながらツール毎に細かいキーバインドが異なる。同じ機能は同じキーバインドで扱えるようにしたいと思っていた。 そこで、fzfや以前愛用していたvimfiler/ctrlpと同様の使い勝手が欲しくて、<C-o>、<C-t>、<C-v>、<C-s>のキーバインドでタブや画面分割して開けるようにした。 プラグイン側からキーバインドを動的に設定するアイデアは、tig-explorerにも取り込んでいる。
Mon, Jul 11, 2016

ソースコードを読む

エンジニアとなり、RubyやRailsのプログラムを読み書きするようになって2年経った。 ソースコードを読む時のワークフローについて考えてみた時に、他人がどのようにソースを読んでいるのが気になった。 どのようにソースを読み、どのように理解するのか、一般解を知る前にまずは自分の方法を整理してみることにした。 ソースを読むメリット 間違いがない APIドキュメントから漏れていること、内部仕様もわかったり StackOverFllowに惑わされない 結果的に迷う時間の短縮 必要なモノ 気合 根性 pry bundle open IDE、Ctagsが使えるエディタ(Emacs, Vim, etc) 定義元ジャンプができればOK 言語、フレームワークの公式リファレンス(http://devdocs.io) 武器の使いドコロ 気合 Googleへ逃げず、ソースを読むという決断をするのために必要 根性 ソースコードを読み始めたが、よくわからんと途中で調べる事をやめてGoogleにすぐ逃げてしまうことを避けるために必要 pry 調べたいコードを実行させ、binding.pryでブレークポイントを作る edit METHOD_NAMEがどこから呼ばれているのかを見る。 Rubyのコードは実行時でないと、正しい呼び出し元がわからない。 また、pryはコード・リーディングやデバッグに便利様々な機能を持っている show-source METHOD_NAME でソースを読むこともできる ls OBJECT_NAMEでオブジェクトのクラスメソッド、インスタンスメソッドなどを確認できる IDEや、Ctagsが使えるエディタ(Emacs, Vim, etc) 定義元にエディタ上でジャンプする これだけのためにIDE使うという人は多い pryのeditで飛んでそこからはエディタでタグジャンプしたりする Ctags コマンドラインツール エディタがメソッドの定義元を調べるための索引tagsを提供 tagsがある場合、vimはデフォルトでc-]押せば定義元にジャンプできる(タグジャンプ) 万能ではなく、ジャンプ先がたまに間違っていることも Gtags(GNU GLOBAL)をいじるともっと賢い索引が手に入るらしい vim使ってる場合は、rails-vimプラグインがRails用にタグ生成コマンドを提供している ファイルサイズが大きく、利用するか否かは個人の環境に依存するため、.gitignoreへtagsを追加しておくべき。 bundle open bundle open LIBRARRY_NAME ライブラリ内のソースの在処(ディレクトリ)を開く README.
Sun, Apr 19, 2015

insert-modeでvimのカーソルキー形状を変えて幸せになる(gnome-terminalの場合)

Command/Normalモードを間違う 問題はこれ。 頻繁にどちらのモードかを勘違いしてしまってタイプミスをしてしまう。 自分はgnome-terminal上でVimを使っている。tmuxなどターミナルマルチプレクサとの共存が必要だからだ。 gVimではカーソル形状が矩形と'|'が切り替わるのだが、ターミナル上では制限があって、調べたところ簡単ではなかった。 暫定策 代替案として、 lightline.vimを使ってInsert/Normalモードの状態を色付きで 画面下部に表示し、視覚的に理解しやすいように試みた。 確かにわかりやすいが、画面の端の色なので、気づかずにミスタイプになることも多い。 また、横のラインを表示・非表示を( autocmd InsertEnter,InsertLeave * set cursorline! )で切り替える アプローチも試みたが、モード間違いは大きく改善はしなかった。 救世主 これまでかと思った矢先に、救世主が現れた(stackoverflowで記事を見つけた) To change the shape of the cursor in different modes, you can add the following into your vimrc. For the Gnome-Terminal (version 2.26)Edit if has("autocmd")au InsertEnter * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape ibeam"au InsertLeave * silent execute "!gconftool-2 --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape block"au VimLeave * silent execute "!