## 事象
[[lazygit.nvim]]で`ESC`キーが使えない。[[Lazygit]]上で[[ノーマルモード]]に切り替わってしまう。
文字列を[[ヤンク]]したりするため[[ノーマルモード]]も利用したいが、大多数は[[Lazygit]]の`ESC`キーに割当たった機能を使いたいので、そちらを優先したい。
## 原因
[[ターミナルジョブモード]]で[[Neovim]]標準の`ESC`キーマップが優先されるため(のはず....)。
## 解決方法
モードチェンジとして`ESC`を使いたいわけでなければ[[#fm-nvim を使う]]方法を推奨。
### [[fm-nvim]]を使う
[[lazygit.nvim]]はアンインストールして[[fm-nvim]]を使う。それだけで、その辺の問題は旨く回避してくれる。
```lua
{
"is0n/fm-nvim",
keys = {
{ '<Space>gg', ':Lazygit<CR>' }
},
```
### 設定で無理やりマッピングする
[[init.lua]]に以下を追加する。
```lua
local bkey = vim.api.nvim_buf_set_keymap
-- Lazygit起動時にESCを無効化する
vim.api.nvim_create_augroup('LazygitKeyMapping', {})
-- ⚠️TermEnterでは起動されたバッファではなく、起動したバッファが対象になってしまう
vim.api.nvim_create_autocmd("TermOpen", {
group = 'LazygitKeyMapping',
pattern = "*",
callback = function()
local filetype = vim.bo.filetype
-- filetypeにはlazygitが渡る。空文字ではない
if filetype == 'lazygit' then
-- このkeymapが肝。なんでこれで動くのかは謎
bkey(0, 't', '<ESC>', '<ESC>', { silent = true })
-- <C-\><C-n>がNeovimとしてのESC。<ESC>はLazygitが奪う
bkey(0, 't', '<C-v><ESC>', [[<C-\><C-n>]], { silent = true })
end
end
})
```
[[GitHub]] Issuesでは以下が最も近そうだが、[[Neovim]]と[[Vim]]の違いや3年以上前の情報であることからそのままでは到底動かない。先のコードにコメントとして記載した箇所がそれに該当する。
<div class="link-card">
<div class="link-card-header">
<img src="https://github.githubassets.com/favicons/favicon.svg" class="link-card-site-icon"/>
<span class="link-card-site-name">GitHub</span>
</div>
<div class="link-card-body">
<div class="link-card-content">
<div>
<p class="link-card-title"><ESC> key not work with Lazygit inside Neovim · Issue #7 · kdheepak/lazygit.nvim</p>
</div>
<div class="link-card-description">
I'm using 0.4.3 branch . Currently, Lazygit has key to exit/return inside itself. But if I use it in...
</div>
</div>
<img src="https://opengraph.githubassets.com/2fa0e56862a7342a688b8caf6ec7681232a10e3f09cde017a07534b731d374b6/kdheepak/lazygit.nvim/issues/7" class="link-card-image" />
</div>
<a href="https://github.com/kdheepak/lazygit.nvim/issues/7"></a>
</div>
## 参考
- [\<ESC\> key not work with Lazygit inside Neovim · Issue \#7 · kdheepak/lazygit\.nvim](https://github.com/kdheepak/lazygit.nvim/issues/7)
- [Neovim Lua設定覚え書き&LSP入門](https://zenn.dev/botamotch/articles/4ef893e0d4cd40)
- [おさらい autocmd/augroup \#Vim \- Qiita](https://qiita.com/s_of_p/items/b61e4c3a0c7ee279848a)
- [NeovimのためのLua入門 init\.lua編](https://zenn.dev/slin/articles/2020-11-03-neovim-lua2)