如果你想在不让光标跳动的情况下添加一个换行符,你可以:
(这是用Lua编写的Neovim代码,但你也可以将其转换为Vim脚本。)
vim.keymap.set("n", "<CR>", "mao<esc>0<S-d>`a<cmd>delmarks a<cr>", { desc = "Add new line below" })
vim.keymap.set("n", "<S-CR>", "maO<esc>0<S-d>`a<cmd>delmarks a<cr>", { desc = "Add new line above" })
这个使用标记来保留你的行和列位置。并删除在打开新行时自动添加的任何字符(例如注释字符)。
ma
:标记当前光标位置。
o
:打开新行并进入插入模式。
<esc>
:进入正常模式。
0<S-d>
:跳转到行的开头并清空它。
`a
:跳转到原始标记的光标位置。
<cmd>delmarks a<cr>
:删除该标记。
请注意,如果你想避免在非正常窗口中映射回车键(例如在快速修复列表中按下回车键仍然会带你到文件),你可以:
local normal_window_keymap = function(mode, lhs, rhs, opts)
local merged_opts = vim.tbl_extend("force", { noremap = true, expr = true }, opts or {})
vim.keymap.set(mode, lhs, function()
local buftype = vim.fn.win_gettype()
return buftype == "" and rhs or lhs
end, merged_opts)
end
normal_window_keymap("n", "<CR>", "mao<esc>0<S-d>`a<cmd>delmarks a<cr>", { desc = "Add new line below" })
normal_window_keymap("n", "<S-CR>", "maO<esc>0<S-d>`a<cmd>delmarks a<cr>", { desc = "Add new line above" })
$TERM
是什么(如果是 *nix)? - timssecho $TERM
->xterm
为什么? - helqmap <CR> o<Esc>
可以工作。但是,如何映射O<Esc>
?对于我的糟糕英语,我感到抱歉。 - helq