我试图在VIM中自定义Enter
密钥Normal
模式的行为.这是我的.vimrc
:
nmap <CR> o<Esc>
nmap <S-CR> i<CR><Esc>
Run Code Online (Sandbox Code Playgroud)
我试图让Enter在按下当前行之后简单地追加换行符.但是,如果Shift-Enter
按下组合,我想打破光标处的当前行.
后者不起作用.每当我按下Shift-Enter
它时,只需附加一行而不会在光标处打破它.
Ing*_*kat 38
由于键盘输入在内部处理的方式,遗憾的是今天在Vim的终端版本中通常不可能(<S-CR>
在所有平台和Windows控制台Vim中都应该在GVIM中工作).这是一个众所周知的痛点,也是关于vim_dev和#vim IRC频道的各种讨论的主题.
有些人(最重要的是Paul LeoNerd Evans)希望解决这个问题(即使是支持这种情况的终端中的控制台Vim),并提出了各种提案,cp.http://groups.google.com/group/vim_dev/browse_thread/thread/626e83fa4588b32a/bfbcb22f37a8a1f8
但截至今天,尚未有任何补丁或志愿者挺身而出,尽管许多人表示希望在未来的Vim 8主要版本中使用它.
<CR>
:如果您<CR>
在正常模式下映射,它将干扰命令行窗口中历史项的选择,并在quickfix /位置列表窗口中跳转到错误下的错误!(除非你添加以下内容:)
:autocmd CmdwinEnter * nnoremap <CR> <CR>
:autocmd BufReadPost quickfix nnoremap <CR> <CR>
Run Code Online (Sandbox Code Playgroud)
:nmap
:你应该使用:noremap
; 它使映射不受重映射和递归的影响.
Raf*_* B. 15
我设法纠正我的终端键码Shift+ Enter 通过发送键码的Vim显然希望.取决于您的终端, (添加Ctrl+ Enter作为奖励!)
对于单个配置文件打开首选项 → 配置文件 → 键 → [+](添加)
对于所有配置文件打开首选项 →
键 → [+](添加)
Esc键+ [13;2u
重复Ctrl+ Enter,用顺序:[13;5u
urxvt,附加到您的.Xresources
文件:
URxvt.keysym.S-Return: \033[13;2u
URxvt.keysym.C-Return: \033[13;5u
Run Code Online (Sandbox Code Playgroud)
Alacritty,在下面key_bindings
,添加以下内容~/.config/alacritty/alacritty.yml
:
- { key: Return, mods: Shift, chars: "\x1b[13;2u" }
- { key: Return, mods: Control, chars: "\x1b[13;5u" }
Run Code Online (Sandbox Code Playgroud)
Cor*_*ren 13
我还想映射<S-CR>,发现我无法让它在CLI模式下工作,直到我使用Ctrl + V然后<Shift + Enter>添加第二个映射进行映射击键.然而,仍然需要<S-CR>映射以使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)
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 12.04上测试了这个.快乐的Vimming!
不能映射<S-CR>
在CLI Vim的,不管你怎么努力,因为Vim无法区分<S-CR>
从<CR>
.
你必须找到另一个映射或坚持使用GVim/MacVim.
编辑
某些终端仿真器(如Mac OS X上的iTerm.app或Terminal.app)允许您设置快捷方式以将特定字符序列发送到shell.如果你有这种可能性,它可能值得一试,但你会很快习惯一个特定于平台的gyzmo,这是不能移植的,好吧......我真的不推荐它.
Ingo Karkat和romainl是100%正确的.不过你要问的是常见的,所以我想给你一些选择.
我个人推荐使用Tim Pope的Unimpaired插件.它提供了许多映射,但是你会寻找那些是[<space>
和]<space>
它创造的空行上面分别当前线以下.Unimpaired还提供了很好的映射,可以通过quickfix列表,缓冲区列表,选项切换等等.了解:h unimpaired
更多.
如果你不想使用未受损的插件,但是下面的映射是一些快速映射放在你的~/.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>
Run Code Online (Sandbox Code Playgroud)