狐好きぷろぐらまー

狐好きプログラマーのブログです。

【VSCodeVim】vim-plugを使ったことがないけど、VSCodeVimからVSCode Neovimに移行した【VSCode Neovim】

こんにちは、pregum_foxです。

明日は技術書典があるので行ってみようと思ってチケットを見ると13時までは売り切れていました。

行く予定の方は下記からチケットを受け取っておくことをお勧めします。

techbookfest.org

ちなみにチケット自体は0円です。

チケット予約・確認箇所

はじめに

この記事では、以下のような人間でもVSCodeVimからVSCode Neovimへの移行過程を共有します。

  • vscodeにもneovim拡張機能あるんだ、ん、vim-plug なにそれ?美味しいの?
  • VSCode Neovim入れたけど動かない〜
  • init.vimの中の記述のPlug ~~ ってなに?
  • なにもわかんないけど、とりあえず動けばヨシ!

以下目次です。

この記事の対象読者

  • VSCodeVim を使用しているが、VSCode Neovim に移行しようと考えている人
  • VSCodeVimに慣れてきたが、動作にラグがある為、VSCode Neovimを試してみたいと思っている人
  • Neovim使ったことがないけど、vimである程度慣れたので、使ってみたい人
  • こちら の記事を見て移行しようとして、surround.vimやeasymotionなどのプラグインがうまく動かなくて萎えたけど頑張って移行したい人
  • init.vimvim-plugという言葉に馴染みはないけどVSCodeVimからVSCode Neovimに移行したい人

この記事を読むと、できるようになること

  • vim-plug の使い方がわかるようになる。
  • VSCode Neovimを入れて、easymotionやsurround.vimが使えるようになる。
  • easymotionやsurround.vimが使える init.vim の書き方がわかる

この記事の想定していない読者

  • VSCodeVimを飛ばして、いきなりVSCode Neovimから触ろうとしている方
    • 途中で力尽きてしまう可能性があります。
    • VSCodeVimで一通り慣れてからVSCode Neovimへの移行をお勧めします。
  • Vimがどういったものかご存知では無い方
    • VSCode Neovimを入れた途端、VSCodeが壊れてしまったと感じるかもしれません。

動作環境

項目 内容
Chip M1 Mac
OS Sonoma 14.1

移行手順

0. neovimのインストール

VSCode Neovimは仕組み上内部で動くNeoVimが必要になります。 まずはhomebrewでNeoVimをインストールします。

brew install neovim

後、~/.config/nvim/init.vim ファイルはVSCode Neovimは作ってくれないので、自分で作る必要があります。 下記コマンドでnvimディレクトリの作成とinit.vimファイルの生成を行います。

  mkdir -p ~/.config/nvim
  touch ~/.config/nvim/init.vim

1. Plugのセットアップ

Plugのセットアップは最初の大きなステップでした。vim-plugをインストールし、~/.config/nvim/autoloadディレクトリにplug.vimを設置する必要がありました。これは、以下のコマンドを使用して行いました。

curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

このステップの完了後、Neovimを起動し、Neovim上で :PlugInstall と入力してコマンドを実行することで、プラグインのインストールが実行されます。ただし、これだけでは十分ではなく、 ~/.config/nvim/init.vim を再読込するか、Neovimを再起動する必要がありました。

2. easymotionの設定

easymotionプラグインは、カーソル移動を容易にするために導入しました。このプラグインの設定には、次のようなマッピングが含まれています。

nmap <Leader>s <Plug>(easymotion-overwin-f)

これにより、sに続けて検索したいアルファベットを入力すると、画面上に候補が表示されます。

3. 追加の試み

VSCode環境においてinoremap jj の設定を反映させるために、以下の記事を参考にしました。

VSCodeでVimを使うための設定方法

現在使用している init.vim

現在(2023-11-11時点) 私が使用しているでのinit.vimは下記の通りです。

とりあえず、surround.vimとeasymotionが動いているので満足しています。

ほとんど下記記事のinit.vimをお借りしています。

VSCode と NeoVim 拡張機能セットアップについて | プログラマー人生満喫ブログ

if exists('g:vscode')

    let g:mapleader = "\<Space>"
    nnoremap <leader>a :echo "Heelo"<CR>
    " VSCode extension
    call plug#begin()
    Plug 'tpope/vim-commentary' "コメントプラグイン
    Plug 'tomasiser/vim-code-dark' "vimのカラースキーマ
    Plug 'leafgarland/typescript-vim' "Typescriptのカラースキーマ
    Plug 'rhysd/clever-f.vim'
    Plug 'tpope/vim-surround'
    " Plug 'kylechui/nvim-surround'
    Plug 'terryma/vim-expand-region'
    Plug 'asvetliakov/vim-easymotion'
    call plug#end()

    xmap gc  VSCodeCommentary
    nmap gc  VSCodeCommentary
    omap gc  VSCodeCommentary
    nmap gcc VSCodeCommentaryLine

    nnoremap  fp call VSCodeNotify('workbench.action.quickOpen')
    nnoremap  fgs call VSCodeNotify('workbench.view.scm')

    inoremap jj <Esc>
    nnoremap <Leader>l $
    nnoremap <Leader>h ^
    nnoremap <Leader>j <C-d>
    nnoremap <Leader>l <C-u>

    nmap <Leader>w <Plug>(easymotion-overwin-w)
    nmap <Leader>s <Plug>(easymotion-overwin-f)

    " map v (expand_region_expand)
    " map  (expand_region_shrink)

    set clipboard=unnamed,unnamedplus
else
    let mapleader="\<Space>"
    call plug#begin()
    Plug 'junegunn/fzf.vim'
    Plug 'junegunn/fzf', { 'do': { -> fzf#install() } }
    Plug 'neoclide/coc.nvim', { 'branch': 'release' }
    Plug 'tpope/vim-fugitive'
    Plug 'tpope/vim-commentary' "コメントプラグイン
    " Plug 'kylechui/nvim-surround'
    Plug 'tpope/vim-surround'
    Plug 'tomasiser/vim-code-dark' "vimのカラースキーマ
    Plug 'lambdalisue/fern.vim' "ファイラー
    Plug 'lambdalisue/fern-git-status.vim' "ファイルツリーにgit差分表示
    Plug 'lambdalisue/fern-renderer-nerdfont.vim' "ファイラーのアイコン用2

    Plug 'easymotion/vim-easymotion' " カーソル移動用
    call plug#end()

    " tab関連
    set autoindent
    set tabstop=4
    set shiftwidth=4
    set expandtab
    set number

    nmap <Leader>w <Plug>(easymotion-overwin-w)
    nmap <Leader>s <Plug>(easymotion-overwin-f)

    inoremap jj <Esc>
    nnoremap <Leader>l $
    nnoremap <Leader>h ^
    nnoremap <Leader>j <C-d>
    nnoremap <Leader>l <C-u>

    let g:EasyMotion_do_mapping = 0
    let g:EasyMotion_smartcase = 1
endif

まとめ

この記事では、Pluginを初めて使用する過程での学びと、vscode-vimからvscode-nvimへの移行経験を共有しました。この移行は、新しいツールへの適応と、技術的な課題の克服という点で非常に有益な経験でした。今後も、このような技術的な冒険を通じて、さらなる知識とスキルを身につけていきたいと思います。

ちなみに1. Plugのセットアップ からまとめの上記の文までGPTsで作った推敲用botくんに考えてもらいました。(私はmarkdown形式にするために整えたりしました。)

ここまで読んでいただきありがとうございました。

参考URL