Closed6

ひとりdotfiles Advent Calendar 2023

Mutsuha AsadaMutsuha Asada

開始前(11/30)の状態

目標としては普段の開発をNeovimで完結できるようにLSPとか入れることと、CIを書くこと、サーバ側の設定もすることなど。ゆるくやります

GitHubはこちら

https://github.com/momeemt/dotfiles

Mutsuha AsadaMutsuha Asada

この投稿はひとりdotfiles Advent Calendar 2023の1日目です。
今日は以下に取り組みましたのでそれについて説明します。

  • Neovim、zshで矢印キーを無効にする
    • 慣れておらず無意識に手が伸びてしまうため
  • Gitのコミットに署名できるようにする

矢印キーを無効にする

まず、zshではbindkey -rを用いることで特定のキーバインドを無効にできます。
ターミナルによってシーケンスが異なることがあるので、矢印キーはcatコマンドで標準入力を待ち受けて確かめます。

$ cat
^[[A^[[B^[[D^[[C

それをそのままzshrcに追記しました。

zsh/zshrc
bindkey -r "^[[A"
bindkey -r "^[[B"
bindkey -r "^[[C"
bindkey -r "^[[D"

その結果、以下のようにzsh上で矢印キーが無効になりました。emacs keybindを有効にしているので、^F,^Bで前後に移動できます。tmuxのprefixとして^Aを設定しているので、行頭に戻るのに2度入力する必要があり、これはどうすれば良いのかなと思っています。

Neovimでは以下のように記述することで矢印キーを無効化できます。

init.vim
noremap <Up> <Nop>
noremap! <Up> <Nop>
noremap <Down> <Nop>
noremap! <Down> <Nop>
noremap <Left> <Nop>
noremap! <Left> <Nop>
noremap <Right> <Nop>
noremap! <Right> <Nop>

noremap!は挿入モード、コマンドラインモードにおいて無効化するような設定です。
これでNeovimについても矢印キーを無効にすることができました。

Gitのコミットに署名する

gnupgをインストールして鍵を作って公開鍵をGitHubに登録したら署名されるようになりました。programs.git.userNameなどを設定しているのに反映されていなかったのは謎。

1つ目のコミットはメールアドレスの不一致で認証に失敗している。

終わりに

あとは所用があってOCamlのLSPを用意して動きはしましたがコピペで中身を全然理解できていないので、この辺を読んで自分でLuaに書き直す回などがあってもいいなと思っています。初日から遅刻したので今日はこの辺で

Mutsuha AsadaMutsuha Asada

この投稿はひとりdotfiles Advent Calendar 2023の2日目です。
今日は以下に取り組みましたのでそれについて説明します。

  • nvim-lspconfigの設定について眺めてLuaで書き直した
  • Telescopeへの設定を追加した

nvim-lspconfig

マニュアルに従って最低限動作する環境が以下になります。

nvim-lspconfig.lua
local nvim_lsp = require('lspconfig')

local on_attach = function (client, bufnr)
end

nvim_lsp.ocamllsp.setup {
  on_attach = on_attach;
}

ここからon_attach関数内にキーバインドなどを色々追加しました

nvim-lspconfig.lua
local nvim_lsp = require('lspconfig')

local options = {
  noremap = true,
  silent = true,
}

vim.keymap.set('n', '<space>e', vim.diagnostic.open_float, options)
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, options)
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, options)
vim.keymap.set('n', '<space>q', vim.diagnostic.setloclist, options)

local on_attach = function(_, bufnr)
  local buffer_options = {
    noremap = true,
    silent = true,
    buffer = bufnr
  }
  vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, buffer_options)
  vim.keymap.set('n', 'gd', vim.lsp.buf.definition, buffer_options)
  vim.keymap.set('n', 'K', vim.lsp.buf.hover, buffer_options)
  vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, buffer_options)
  vim.keymap.set('n', '<C-k>', vim.lsp.buf.signature_help, buffer_options)
  vim.keymap.set('n', '<space>wa', vim.lsp.buf.add_workspace_folder, buffer_options)
  vim.keymap.set('n', '<space>wr', vim.lsp.buf.remove_workspace_folder, buffer_options)
  vim.keymap.set('n', '<space>wl', function()
    print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
  end, buffer_options)
  vim.keymap.set('n', '<space>D', vim.lsp.buf.type_definition, buffer_options)
  vim.keymap.set('n', '<space>rn', vim.lsp.buf.rename, buffer_options)
  vim.keymap.set('n', '<space>ca', vim.lsp.buf.code_action, buffer_options)
  vim.keymap.set('n', 'gr', vim.lsp.buf.references, buffer_options)
  vim.keymap.set('n', '<space>f', function()
    vim.lsp.buf.format {
      async = true
    }
  end, buffer_options)
end

nvim_lsp.ocamllsp.setup {
  on_attach = on_attach,
  capabilities = capabilities,
}

nvim_lsp.lua_ls.setup {
  on_attach = on_attach,
  capabilities = capabilities,
  settings = {
    Lua = {
      diagnostics = {
        globals = { 'vim' }
      }
    }
  }
}

nvim_lsp.vimls.setup {
  on_attach = on_attach,
  capabilities = capabilities,
}

nvim_lsp.nim_langserver.setup {
  on_attach = on_attach,
  capabilities = capabilities,
}

nvim_lsp.rust_analyzer.setup {
  on_attach = on_attach,
  capabilities = capabilities,
}

nvim_lsp.nil_ls.setup {
  on_attach = on_attach,
  capabilities = capabilities,
}

所要でOCamlを書いているのでそれと、dotfilesで使うのでLua、VimScript、NixのLSP、あと普段使いのためにNimとRustのLSPを入れました。

感動。定義ジャンプとかrenameとかもできるので本当に快適になりました。

https://github.com/momeemt/dotfiles/pull/14

Telescopeへの設定を追加

キーマップに追加しただけなのでコードは省略しますが、Ctrl+Pでファジーファインダーが呼べるようになってこの辺りで普段使いしているVSCodeと機能的な面では変わらなくなった[1]ので、あとは私がキーバインドを暗記するかどうかにかかってきました。

https://github.com/momeemt/dotfiles/pull/18

終わりに

便利になってきた

脚注
  1. VSCodeについて全然知らない。色が付くエディタだと思っている節もある ↩︎

Mutsuha AsadaMutsuha Asada

この投稿はひとりdotfiles Advent Calendar 2023の3日目です(遅刻)。
今日は以下に取り組みましたのでそれについて説明します。

  • shellcheckの導入

shellcheck

shellcheckはシェルスクリプトを静的に検査するためのツールです。適用する前に実行するスクリプトが安全であるかを確かめたかったことが動機です。

https://github.com/momeemt/dotfiles/pull/30

検査した結果、completationで定義していたローカル変数がトップレベルで定義できないことがわかったので、main関数に閉じ込めて、かつ不使用変数を扱うために連想配列に変換しました。

終わりに

今日は予定があり時間がなかったので簡単にこれで終わります

Mutsuha AsadaMutsuha Asada

この投稿はひとりdotfiles Advent Calendar 2023の4日目です。
今日は以下に取り組みました。

  • barbar-nvimの導入
  • Alacrittyのキーバインドを調整

barbar-nvim

barbar-nvimはNeovimにタブを追加するためのプラグインです。

https://github.com/momeemt/dotfiles/pull/33

基本的には他のプラグインと同じように設定するだけなのですが、macOSはOptionキーをメタキーとして扱っており、例えば Option+b で ∫ と入力されます。しかし、この挙動によってNeovimに対してAltキーを含むキーバインドを設定すると上手く動作しません。

そこで、次のようにAlacrittyのキーバインドを調整しました。

https://github.com/momeemt/dotfiles/blob/1b7092c5991ecbc670a6cd0d866ff3562f8a3ad9/nix/alacritty.nix#L47-L423

Nix側でもエスケープされて \\x1ba がYAMLに変換されると \x1ba と設定されます。最初は素直に \x1ba と設定していましたがOptionキーを含む入力がすべて壊れました。

終わりに

Atom→VSCodeと変遷してきたのでタブに慣れており、Neovimを使い始めてからタブを複数持つことがなかったのですごく使いやすくなった気がします。キーバインドも覚えやすいので徐々に一日のうちNeovimを使う時間が増えてきました。

このスクラップは4ヶ月前にクローズされました