🧊

Vimmerになって10年が経ってた

なんとなく過去の記事を遡ってたら(若さに満ち溢れててあまり直視したくはない)、どうやら2013年にVimを使い始めたって書いてあった。

そうか〜2013年か〜・・・え、もう10年も経ってんの?!ってなったので、記念に記録を残しておこうかなと。

エディタ遍歴

思い出してみるとこんな感じか。

  • 2007年04月-: Coda
  • 2012年05月-: Coda2
  • 2013年07月-: Vim
  • 2023年01月-: Neovim

もともとは、CodaっていうPanic社のエディタが好きだった。

そのCodaも今ではメンテが終了して、Novaっていうエディタに生まれ変わってた。時代を感じる。

CodaからNovaへ https://panic.com/jp/coda/

VimからNeovimに移行したのは今年のこと。今のところ、別のエディタに移行しようとかは考えてない。

Helixがもう少し熟れたら、ちょっと試してみたい気持ちはあるけど・・・。

helix-editor/helix: A post-modern modal text editor. https://github.com/helix-editor/helix

使い方

基本的に、仕事時間のほとんどをターミナル(最近のおすすめはWezTerm)上で過ごすし、書き物をするときはだいたいNeovimでやってる。

なので、VimでもNeovimでも、GUIではなくCUI上で開くやつが良い。ここは譲れないポイント。

よく開くファイルタイプとしては、

  • javascript
  • typescript
  • svelte
  • markdown
  • json
  • astro
  • html
  • css
  • lua
  • toml
  • typescriptreact
  • javascriptreact
  • rust
  • python
  • cpp

って感じ。

コンテキストを分けたいので、TODOメモだけはCotEditor(軽いのがいい)で開きっぱなしにしてる。

ちょっと前までMarkdownを書くときはそっちを使ってたけど、Neovim(というかTree-sitter)のハイライトが偉くて、コードブロックの中までキレイにしてくれるもんで、すっかり使わなくなってしまった。

Neovimの設定

https://github.com/leaysgur/dotfiles/blob/9b3a1e29213029273026974daeff11f688729965/init.lua

なんとなく、1ファイルで完結させたいし、あまり長々と設定ファイルを書きたくないという思いがあり、この360行が今のすべて。

せっかくなので、プラグインも列挙しておく。(汎用的な依存プラグインは割愛)

  • folke/lazy.nvim
    • プラグインマネージャー
  • AlexvZyl/nordic.nvim
    • Nord風テーマ
  • echasnovski/mini.statusline
    • シンプルなステータスライン
  • lewis6991/gitsigns.nvim
    • Gitの差分行を表示
  • lukas-reineke/indent-blankline.nvim
    • インデントの深さのガイド
  • NvChad/nvim-colorizer.lua
    • カラーコードを可視化
  • RRethy/vim-illuminate
    • カーソル下の変数をハイライト
  • nvim-neo-tree/neo-tree.nvim
    • Netrew代わりのファイラー
  • nvim-treesitter/nvim-treesitter
    • シンタックスハイライトの命綱
  • JoosepAlviste/nvim-ts-context-commentstring
    • Svelteなど1ファイルに複数のファイルタイプが共存する時にコメント文字を自動判別
  • windwp/nvim-ts-autotag
    • 自動閉じタグ
  • terrortylor/nvim-comment
    • コメントのトグル
  • andymass/vim-matchup
    • カッコやHTMLタグの開始・終了ジャンプ
  • Darazaki/indent-o-matic
    • インデント判別
  • echasnovski/mini.surround
    • カッコやemmetのタグ囲み・置換・削除
  • windwp/nvim-autopairs
    • 自動でカッコを閉じる
  • neovim/nvim-lspconfig
  • williamboman/mason.nvim
  • williamboman/mason-lspconfig.nvim
    • エディタレベルでのLSPやフォーマッタの管理
  • j-hui/fidget.nvim
    • LSPのローディング表示
  • dnlhc/glance.nvim
    • LSPでリファレンス元をチラ見できる
  • stevearc/conform.nvim
    • フォーマッタ
  • hrsh7th/nvim-cmp
  • hrsh7th/cmp-buffer
  • hrsh7th/cmp-emoji
  • hrsh7th/cmp-path
  • hrsh7th/cmp-nvim-lsp
  • hrsh7th/cmp-nvim-lsp-signature-help
    • 入力補完(絵文字が便利)
  • zbirenbaum/copilot-cmp
  • zbirenbaum/copilot.lua
  • onsails/lspkind.nvim
    • NeovimでもCopilot

という具合に、たぶん世の人たちに比べると、あんまり多くないと思う。

にわかVimmer

プラグインの顔ぶれを見てお気付きの通り、そして自分で言うのもアレかもしれないが、にわかVimmerであることを自認してる。

  • 設定も薄っぺらいし
  • Escもキーマップもそんなに変えてないし
  • 複数タブも開かないし
  • Quickfixとかマクロも使ったことない

その最たるものが、hjklキーを一切使わず、矢印キーをめちゃめちゃ使うところかと。

基本的にコード書きながらも前後を見返したり、とにかくうろうろしたいタイプなので、

  • ggGShift押しながらので縦方向に大きく動きつつ
  • その後はざっぱに}{で動きつつ
  • 横方向にはeShift押しながらの0$
  • 最終的に矢印キーで1文字ずつ移動

というのが基本形。 なんならINSERTモードでも移動したい時があるので、なおさら矢印キーのお世話になってしまってる。

相対行数で移動するショートカットとかも使わないし、モーション系の移動プラグインとも相性があまりよくなくて、

  • プラグインをトリガー
  • ジャンプ先の文字を目で探す
  • それを間違えずに押す

そんな暇あったら動いたほうが早いし脳内メモリも使わんわ・・って。 (flash.nvimは2文字ジャンプ縛りがない珍しいタイプだったので試してみてたけど、結局いらんなって結論に至った)

事あるごとに矯正しようと過去に何度か試みてはきたけど、さすがに10年分も癖が貯まると、もうこういうスタイルでいっかって。

そういう意味では、VSCode+VSCodeVimとかでも、たぶん苦労なくやっていけるんやろうなとは思う。

それでも

  • ターミナル上で使える
  • 起動が早い
  • UIから何まで好きにでき、欲しい機能だけを付け足せる
  • ddda{とかdi"とか、複数行編集とかはやはり便利
    • .リピートもたまに使う
  • 代替プラグイン探し楽しい

こういうところは、VSCodeには代えられないなーと。

あとは、ChromeよりFirefoxを使いたい気持ちに似たナニカもあるかもしれない。

ガチなVimmerでもなく、IDE化したいわけでもない、いろんな人のいろんなこだわりポイントを、懐深く受け入れてくれるってところに素敵さを感じてるんかも。