Vim 如何映射Shift Enter
我正在尝试自定义Vim中Vim 如何映射Shift Enter,vim,Vim,我正在尝试自定义Vim中Enter键入Normal模式的行为。 这是我的.vimrc: nmap <CR> o<Esc> nmap <S-CR> i<CR><Esc> nmap o nmap i 我试图使Enter键在按下时在当前行后添加一个换行符。但是,当按下Shift-Enter组合键时,我想在光标处打断当前行 后者不起作用。每当我按下Shift Enter键时,它只会追加一行,而不会在光标处打断它。无论您如何努力,都无法在CL
Enter
键入Normal
模式的行为。
这是我的.vimrc
:
nmap <CR> o<Esc>
nmap <S-CR> i<CR><Esc>
nmap o
nmap i
我试图使Enter键在按下时在当前行后添加一个换行符。但是,当按下Shift-Enter组合键时,我想在光标处打断当前行
后者不起作用。每当我按下Shift Enter键时,它只会追加一行,而不会在光标处打断它。无论您如何努力,都无法在CLI Vim中映射
,因为Vim无法区分
和
您必须找到另一个映射或坚持使用GVim/MacVim
编辑
某些终端模拟器,如Mac OS X上的iTerm.app或terminal.app,允许您设置快捷方式以将特定字符序列发送到shell。如果你有这种可能性,也许值得一试,但你会很快习惯于无法移植的特定于平台的gyzmo,因此,我并不推荐它。由于键盘输入是在内部处理的,不幸的是,这在今天的Vim终端版本中通常不可能实现(
应在所有平台上的GVIM中以及在Windows控制台Vim中工作)。这是一个已知的痛点,也是关于Vim_dev和#Vim IRC频道的各种讨论的主题
一些人(最重要的是Paul LeoNerd Evans)希望解决这一问题(即使是支持这一点的终端中的console Vim),并提出了各种建议,cp
但到今天为止,还没有补丁或志愿者出现,尽管许多人表示希望在未来的Vim8主要版本中有这样的补丁或志愿者
关于映射的注释
:
如果在正常模式下映射
,它将干扰命令行窗口中历史项目的选择,并干扰快速修复/位置列表窗口中光标下的跳到错误!(除非添加以下内容:)
:autocmd CmdwinEnter*nnoremap
:autocmd BufReadPost快速修复nnoremap
关于:nmap
的注释:
;它使映射不受重新映射和递归的影响。Ingo Karkat和Romaill是100%正确的。但是,您的问题很常见,所以我想给您一些选择 我个人建议使用Tim Pope的。它提供了许多映射,但您要查找的映射是
[
和]
分别在当前行的上方和下方创建空行。Unpaired还提供了很好的映射,用于在快速修复列表、缓冲区列表、选项切换和许多其他内容中移动。有关更多信息,请参阅:h Unpaired
如果您不想使用未损坏的插件,但像下面的映射一样,可以将一些快速映射放入~/.vimrc
文件中:
nnoremap <silent> [<space> :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space> :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>
URxvt.keysym.S-Return: \033[13;2u
URxvt.keysym.C-Return: \033[13;5u
nnoremap[:put!=重复(['],v:count)]+1
nnoremap]:put=repeat([''],v:count)[-1
我还想映射,发现我无法让它在CLI模式下工作,直到我为映射的击键添加了第二个使用Ctrl+V的映射。但是,GVIm仍需要映射才能按预期工作。这将呈现您的.vimrc代码段,如下所示:
nnoremap <CR> o<Esc>
nnoremap <S-CR> i<CR><Esc> " Needed for GVIm
nnoremap ^[0M i<CR><Esc> " Needed for CLI VIm (Note: ^[0M was created with Ctrl+V Shift+Enter, don't type it directly)
nnoreo
GVIm需要nnoremap i
nnoremap^[0M i”是CLI VIm所需的(注意:^[0M是使用Ctrl+V Shift+Enter创建的,不要直接键入)
我在Ubuntu12.04上测试了这个。祝你Vimming快乐!我成功地更正了Shift+Enter的终端键代码 通过发送Vim显然期望的密钥代码。根据您的终端, (添加Ctrl+Enter作为奖励!) 对于单个配置文件,请打开首选项→ 轮廓→ 钥匙→ [+](添加)
对于所有打开的配置文件首选项→ 钥匙→ [+](添加)
- 键盘快捷键:(按Shift+Enter)
- 操作:发送转义序列
- Esc+
重复Ctrl+Enter,顺序为:[13;2u
[13;5u
.Xresources
文件中:
nnoremap <silent> [<space> :<c-u>put!=repeat([''],v:count)<bar>']+1<cr>
nnoremap <silent> ]<space> :<c-u>put =repeat([''],v:count)<bar>'[-1<cr>
URxvt.keysym.S-Return: \033[13;2u
URxvt.keysym.C-Return: \033[13;5u
在键绑定
下,将以下内容添加到~/.config/alacritty/alacritty.yml中:
- { key: Return, mods: Shift, chars: "\x1b[13;2u" }
- { key: Return, mods: Control, chars: "\x1b[13;5u" }
,在~/.config/kitty/kitty.conf
中:
map shift+enter send_text all \x1b[13;2u
map ctrl+enter send_text all \x1b[13;5u
备选方案:将i
映射到。这将产生一个良好的二元性,用于拆分和连接行。并使用unpaird的]
添加空行(如所建议的)。我正在尝试执行相同的操作=)这就是我最后所做的,谢谢你的:nmap
vs:noremap
,知道它非常有用。我可能会将它绑定到其他东西上。嘿,非常感谢!我刚刚意识到为什么我会有这种奇怪的行为(我设置了nnoremap:
=P)。顺便问一句,你是怎么发现的?我冒昧地纠正了“黑线”:-)哦,还有+1的建议。事实上,我在中有自己的选择,因为我不喜欢Tim把一堆不相关的功能放在一起,只是按照常见的映射前缀进行分组。谢谢你的更改和提到你的LineJuggler插件。我喜欢有很多插件可供选择。干杯!有了iTerm,这是非常有用的可能可以映射任何您想要的疯狂组合,如果标准的转义序列用完,则可以使用自定义转义序列。使用PuTTY等工具,您可以在关键映射中编译,就像我使用F10和Backspace所做的那样。这应该是可接受的答案!(我只需要为Shift+Enter
创建iTerm映射)这太棒了。alacrity
中的映射总是很混乱。谢谢分享!在alacrity中,
绑定对我不起作用。
工作起来很有魅力,但
似乎相当于vim中的zt
,这让我感到困惑!我在哪里可以找到关于转义序列vi的更多信息m需要?@jchook这可能是Vim配置中的一个设置。请尝试使用-u NONE
或无配置运行。并验证您是否正确