Windows Terminal + WSL2 + Neovim で Autolist.nvim を使う場合のメモ
問題の内容
箇条書きの各行の末尾で改行したら自動的に -
を追加して欲しいので、vim.keymap.set("i", "<S-CR>", "<CR><cmd>AutolistNewBullet<cr>")
というキーバインドを設定しましたが、Shift-Enter
をタイプしても単なる改行になっていました。
1// 期待する動作
2- hogehoge⏎ ← 末尾で改行したら
3- | ← 自動的に `- ` を挿入してカーソルの位置を整えて欲しい
4
5// 実際の動作
6- hogehoge⏎ ← 末尾で改行したら
7| ← 単なる改行になってカーソルが行頭に来る
<S-CR>
を別のキーバインドに変更すると期待通りの動作になる上、他の機能はキチンと動作することから、プラグインの設定は問題ないと思われるのですが、<S-CR>
だけが上手く動かない状態でした。
解決策
同様の問題が起きていないか調べたところ、Shift-Enter
にキーバインドを割り当てても動かないという問題を複数見つけました。それらの問題への回答によると、この問題は Vim の問題ではなく、ターミナルが受け取ったキー入力をシェルに渡す部分での問題ということでした。そのため、ターミナルに対して、Shift-Enter
を受け取ったらシェルに Shift-Enter
を渡すよう設定する必要があるとのことでした。
幸いなことに、回答の中にターミナル毎の設定例が記載されており、Windows Terminal の設定例もありましたので、そちらを拝借して設定ファイルの actions
に次のとおり設定を追加しました。
1{
2 "actions":
3 [
4 {
5 "command":
6 {
7 "action": "sendInput",
8 "input": "\u001b[13;2u"
9 },
10 "id": "User.sendInput.8882FD6D"
11 },
12 {
13 "command":
14 {
15 "action": "sendInput",
16 "input": "\u001b[13;5u"
17 },
18 "id": "User.sendInput.F8A79DCB"
19 }
20 ],
これで期待通りの動作を実現することができました。
1// 実現できた動作
2- hogehoge⏎ ← 末尾で改行したら
3- ← 自動的に `- ` が挿入される
なお、現在の設定は次のとおりです。lazy.nvim を使ってプラグインを管理しているので、/lua/plugin/autolist-nvim.lua
という名前で設定ファイルを作成しています。
1return {
2 {
3 "gaoDean/autolist.nvim",
4 ft = {
5 "markdown",
6 "text",
7 "tex",
8 "plaintex",
9 "norg",
10 },
11 config = function()
12 require("autolist").setup()
13
14 vim.keymap.set("i", "<tab>", "<cmd>AutolistTab<cr>")
15 vim.keymap.set("i", "<S-tab>", "<cmd>AutolistShiftTab<cr>")
16 vim.keymap.set("i", "<C-t>", "<c-t><cmd>AutolistRecalculate<cr>") -- an example of using <c-t> to indent
17 vim.keymap.set("i", "<S-CR>", "<CR><cmd>AutolistNewBullet<cr>")
18 vim.keymap.set("n", "o", "o<cmd>AutolistNewBullet<cr>")
19 vim.keymap.set("n", "O", "O<cmd>AutolistNewBulletBefore<cr>")
20 vim.keymap.set("n", "<CR>", "<cmd>AutolistToggleCheckbox<cr><CR>")
21 vim.keymap.set("n", "<C-r>", "<cmd>AutolistRecalculate<cr>")
22
23 vim.keymap.set("n", "<leader>cn", require("autolist").cycle_next_dr, { expr = true })
24 vim.keymap.set("n", "<leader>cp", require("autolist").cycle_prev_dr, { expr = true })
25
26 vim.keymap.set("n", ">>", ">><cmd>AutolistRecalculate<cr>")
27 vim.keymap.set("n", "<<", "<<<cmd>AutolistRecalculate<cr>")
28 vim.keymap.set("n", "dd", "dd<cmd>AutolistRecalculate<cr>")
29 vim.keymap.set("v", "d", "d<cmd>AutolistRecalculate<cr>")
30 end,
31 },
32}