Open14

Neovim設定覚書

Tomoaki AsanoTomoaki Asano

Plugin Managerを入れる

https://github.com/junegunn/vim-plug

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'

~/.local/share/nvim/site/autoload/plug.vimが作られた

後ほど入れる予定のcoc.nvimを追加して:PlugInstallを実行
一旦init.luaに書いとく(後でdotfilesに移す)

local Plug = vim.fn['plug#']
vim.call('plug#begin', '~/.local/share/nvim/site/autoload/plugged')
Plug('neoclide/coc.nvim', {branch = 'release'})
vim.call('plug#end')
Tomoaki AsanoTomoaki Asano

設定をdotfilesで管理する

~/dotfiles/nvim/init.luaを作成
git管理しつつnvimの設定は今後ここに置いてく

~/.config/nvim/init.luaの中で↑で作成したファイルを読むようにする

dofile(vim.fn.expand('~/dotfiles/nvim/init.lua'))

最初に入れたcocのプラグインはpluginis.luaに、cocのextensionをcoc.luaに置いた

-- coc.lua

vim.g.coc_global_extensions = {
  'coc-tsserver',
  'coc-eslint',
  'coc-prettier',
  'coc-git',
  'coc-fzf-preview',
  'coc-lists',
  'coc-copilot'
}

それぞれをdotfileのinit.luaで読み込む

dofile(vim.fn.expand('~/dotfiles/nvim/lua/plugins.lua'))
dofile(vim.fn.expand('~/dotfiles/nvim/lua/coc.lua'))
Tomoaki AsanoTomoaki Asano

シンボリックリンクで管理

無理矢理dofileで読み込んでたけどシンボリックリンク貼る方が一般的っぽいので変更

Goal

AsIs ~/dotfiles/nvim/init.lua~/.config/nvim/init.luaで読み込む
ToBe ~/.config/nvim~/dotfiles/nvimのシンボリックリンクを貼る

~/.config/nvim を初期状態に戻す

rm ~/.config/nvim

~/dotifiles/nvimでdofileからrequireに変える

require('plugins')
require('coc')
require('filer')
require('options')
require('syntax')

シンボリックリンクを設定

ln -f -n -s ~/dotfiles/nvim ~/.config
Tomoaki AsanoTomoaki Asano

Filerを入れる

https://github.com/nvim-tree/nvim-tree.lua
https://github.com/nvim-tree/nvim-web-devicons

Pluginを導入

ついでにアイコンも入れておく

-- nvim-tree
Plug 'nvim-tree/nvim-tree.lua'
Plug 'nvim-tree/nvim-web-devicons'

アイコンに対応するフォントを導入

アイコンを表示するためにはhack Nerd Fontフォントを入れなくてはいけないのでhomebrew経由で入れる

brew tap homebrew/cask-fonts
brew install --cask font-hack-nerd-font

terminal(Warp)でフォントの設定を変更

Tomoaki AsanoTomoaki Asano

syntax系の設定

見た目部分を設定する

GitHub themeのプラグインを入れる

https://github.com/projekt0n/github-nvim-theme

Plug 'projekt0n/github-nvim-theme'

nvimのカラースキーマに設定

if vim.fn.has('termguicolors') == 1 then
  vim.o.termguicolors = true
end

vim.cmd('set background=dark')
vim.cmd('colorscheme github_dark_colorblind')

nvim-treesitterを導入

コードを解析してハイライトやインデントをいい感じにしてくれるらしい
https://github.com/nvim-treesitter/nvim-treesitter

Plug ('nvim-treesitter/nvim-treesitter', {['do'] = ':TSUpdate'})

設定

require'nvim-treesitter.configs'.setup ({
  ensure_installed = {
    "lua",
    "bash",
    "vim",
    "html",
    "css",
    "scss",
    "go",
    "json",
    "typescript",
    "typoscript",
    "tsx",
    "vue",
  },
 highlight = {
  enable = true,
  },
})
Tomoaki AsanoTomoaki Asano

cocの設定

extensionsの設定

色々面白そうなのある👀
https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions

vim.g.coc_global_extensions = {
  'coc-tsserver',
  'coc-eslint',
  'coc-prettier',
  'coc-git',
  'coc-fzf-preview',
  'coc-lists',
}

補完UIに対するkeyを設定

参考:https://qiita.com/totto2727/items/d0844c79f97ab601f13b

vim.cmd([[
  inoremap <silent><expr> <Enter> coc#pum#visible() ? coc#pum#confirm() : "\<Enter>"
  inoremap <silent><expr> <C-j> coc#pum#visible() ? coc#pum#next(1) : "\<C-j>"
  inoremap <silent><expr> <C-k> coc#pum#visible() ? coc#pum#prev(1) : "\<C-k>"
  inoremap <silent><expr> <Enter> coc#pum#visible() ? coc#pum#confirm() : "\<Enter>"
  inoremap <silent><expr> <Esc> coc#pum#visible() ? coc#pum#cancel() : "\<Esc>"
]])

Github Copilotの導入

https://github.com/github/copilot.vim
copilot.vimを導入して:Copilot setupでauthしたら完了

git clone https://github.com/github/copilot.vim.git \
  ~/.config/nvim/pack/github/start/copilot.vim
Tomoaki AsanoTomoaki Asano

インサートモードから抜けたタイミングでIMEをオフにする

インサートモードで日本語入力した後、ノーマルモードに戻って何かしらしようとした時に、全角入力のままだとちゃんと動かないので自動で戻るようにしたい

im-selectの導入

コマンドラインからIMEを操作できるようにする
https://github.com/daipeihust/im-select

brew tap daipeihust/tap && brew install im-select

動作確認

コマンド実行で現在の状態がわかる

im-select
com.apple.keylayout.ABC

vim-im-selectの導入

im-selectをnvimから操作するプラグイン
https://github.com/brglng/vim-im-select

プラグイン追加

Plug 'keaising/im-select.nvim'

設定ファイル

デフォルト値と、デフォルト値に更新するタイミングを指定

require('im_select').setup({
  default_im_select  = "com.apple.keylayout.ABC",
  set_default_events = {"InsertLeave"},
})
Tomoaki AsanoTomoaki Asano

NeovimでGitを扱いやすくする

toggletermの導入

vim上でTerminalを動かせるようにする
https://github.com/akinsho/toggleterm.nvim

Lazygitの導入

https://github.com/jesseduffield/lazygit

brew経由で導入

brew install jesseduffield/lazygit/lazygit

lazygit.nvimの導入

Lazygitをコマンドモードから実装させるためのプラグイン
https://github.com/kdheepak/lazygit.nvim?tab=readme-ov-file

Plug 'kdheepak/lazygit.nvim'

キーマップの設定

vim.keymap.set('n', '<Space>g', ':LazyGit<cr>', {silent = true, noremap = true})

Flogの導入

treeをいい感じに表示させるプラグイン
https://github.com/rbong/vim-flog

プラグイン設定

Plug 'tpope/vim-fugitive'
Plug 'rbong/vim-flog'

キーマップの設定

vim.keymap.set('n', '<Space>gg', ':Flog<cr>', {silent = true, noremap = true})
Tomoaki AsanoTomoaki Asano

Lazygitでdiffを見やすくする

brew経由でDeltaを入れる

https://github.com/dandavison/delta

brew install git-delta

.gitconfigに設定追加

[pager]
  diff = delta
  log = delta
  reflog = delta
  show = delta

[delta]
  plus-style = "syntax #005CB1"
  minus-style = "syntax #914E00"
  syntax-theme = Monokai Extended
  navigate = true
  side-by-side = true

[interactive]
  diffFilter = delta --color-only

Lazygitのconfigファイルに追記

git:
  paging:
    colorArg: always
    pager: delta --dark --paging=never
Tomoaki AsanoTomoaki Asano

aicommitsの導入

OpenAIを使ってステージングの内容からコミットメッセージを生成したい
https://github.com/Nutlope/aicommits?tab=readme-ov-file#git-hook

npmで導入

brewなかった...

npm install -g aicommits

APIキーを設定

aicommits config set OPENAI_KEY=<your token>

Lazygitのカスタムコマンドに設定

  - key: "C"
    context: "files"
    description: 'commit files with aicommits'
    subprocess: true
    command: "aicommits --type conventional --generate 3"

(本当はaicommitsの中でaicommitsで生成したコミットメッセージを編集できるみたいにしたかったが分からなかった)

Tomoaki AsanoTomoaki Asano

Tmuxを導入する

https://github.com/tmux/tmux

brew install tmux

設定ファイルを作成

touch ~/dotfiles/tmux/tmux.conf

設定を書く

# prefix keyを設定
set -g prefix C-q
unbind C-b
....

~/.tmux.confにシンボリックリンクを貼る

ln -s ~/dotfiles/tmux/tmux.config ~/.tmux.conf

tuxの設定を更新する

tmux source ~/.tmux.conf

クリップボード連携

brew install reattach-to-user-namespace
Tomoaki AsanoTomoaki Asano

zshで入力補完を行う

参考 https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc

zsh-completionsとzsh-autosuggestionsを導入

brew install zsh-completions
chmod -R go-w /opt/homebrew/share

brew install zsh-autosuggestions

zsh設定を追記

if type brew &>/dev/null; then
  FPATH=$(brew --prefix)/share/zsh-completions:$FPATH
   source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
  autoload -Uz compinit && compinit
fi