奇怪的行为:Vim在命令行模式下启动

3

我的Vim(8.0)以命令模式启动,并带有值:2R

我将我的vimrc保存在git repo中,因此我检查了之前的提交,直到找到停止奇怪行为的点。最后一个正常提交和第一个出现错误的提交之间的git差异简单地是:

diff --git a/.vim/common.vim b/.vim/common.vim
index a5b2443..bb209c3 100644
--- a/.vim/common.vim
+++ b/.vim/common.vim
@@ -13,27 +13,28 @@ noremap ( zz
 nnoremap Y y$

 " Find my way around inside text objects
-map [[ "_yaB
-map ]] "_yaB%
-map [b "_yab
-map ]b "_yab%
-map [d "_ya]
-map ]d "_ya]%
+noremap [[ "_yaB
+noremap ]] "_yaB%
+noremap [b "_yab
+noremap ]b "_yab%
+noremap [d "_ya]
+noremap ]d "_ya]%

-map [s (
-map }s )
+noremap [s (
+noremap ]s )

 " Various C-macros
-nmap <C-n> nzz
-nmap <C-a> W50i <Esc>B50ldwBj
-nmap <C-u> ElldwBj
-nmap <C-f> }?function<Enter>{jVN/{<Enter>%
+nnoremap <C-n> nzz
+nnoremap <C-a> W50i <Esc>B50ldwBj
+nnoremap <C-u> ElldwBj
+nnoremap <C-f> }?function<Enter>{jVN/{<Enter>%
 nnoremap <C-c> mwA;<Esc>`w
 nnoremap <C-o> mwO<Esc>0Dj`w
 nnoremap <C-.> mwo<Esc>0Dk`w

 " Give it back
-nnoremap <C-p> <C-o>
+nnoremap <C-[> <C-o>
+nnoremap <C-]> <C-p>

 " for search highlighting
 set hlsearch

这个改变究竟是如何引起这种行为的呢?
相关问题:启动后vim命令行中出现奇怪符号表明这是一个配置错误的TERM环境变量,但我肯定没有手动更改它,并且对比两个提交的env输出,没有任何差异。 编辑:我追踪回到了那一行。
nnoremap <C-[> <C-o>

这可能是个问题,因为我正在重新映射 Esc 键。我感到很困窘,没有考虑到这一点。
我仍然想知道这如何在我看到的行为中表现出来,所以欢迎任何解释。

为什么不尝试进行一些更改,直到确定导致问题的具体代码行呢? - jeremysprofile
@jeremysprofile,你说得对,我本应该这样做的。考虑到这一点,我已经更新了我的问题。 - Igid
1
基本上,vim在启动时使用了Escape键,因此它无法正确执行其启动命令。 - jeremysprofile
只有在 tmux 外部 :2R 的问题才会发生在我身上。但是,映射 <esc> 导致奇怪的箭头行为。详情请参考:https://dev59.com/zmct5IYBdhLWcg3wn-1z。 - M Imam Pratama
1个回答

1
Linux终端使用ANSI转义序列(即以<Esc>开头的字符串)向Vim发送特殊键,并作为应用程序查询其功能的通信协议的一部分。您的映射会干扰此过程,从而导致这些“奇怪”的行为。
因此,请不要映射<Esc>。使用其他键。在GVIM中问题不太明显,但我也不建议在那里使用。如果您绝对需要将<Esc>进行映射,则只能在Vim完全启动后通过:autocmd VimEnter * nnoremap <Esc> ...进行定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接