Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim中的自动关闭卷曲引号_Vim_Typography_Auto Close - Fatal编程技术网

Vim中的自动关闭卷曲引号

Vim中的自动关闭卷曲引号,vim,typography,auto-close,Vim,Typography,Auto Close,我想设置Vim来自动关闭“和”(卷曲引号)对 我已经尝试配置了我能找到的所有五个插件(两个autoclose、surround、closepairs和DiffractMate),但都没有成功。我甚至似乎根本无法重新映射(使用:imap'或类似工具) 我在Arch Linux和uim 1.7.0输入法上使用Vim 7.3;我通过.XCompose中定义的快捷方式插入“and”。重新映射对于我的其他合成键快捷键来说很好,比如!还是?避免使用 inoremap ' ''<left> in

我想设置Vim来自动关闭“和”(卷曲引号)对

我已经尝试配置了我能找到的所有五个插件(两个autoclose、surround、closepairs和DiffractMate),但都没有成功。我甚至似乎根本无法重新映射(使用
:imap'
或类似工具)

我在Arch Linux和uim 1.7.0输入法上使用Vim 7.3;我通过.XCompose中定义的快捷方式插入“and”。重新映射对于我的其他合成键快捷键来说很好,比如!还是?

避免使用

inoremap ' ''<left>
inoremap''

您可以通过一个小功能实现这一点:

function! CloseQuotes()
    normal! i'' 
    startinsert
endfunction
然后按以下方式将其映射到

inoremap ' <ESC>:call CloseQuotes()<CR>
inoremap”:调用CloseQuotes()

重要的是
normal中的感叹号,它防止映射递归。

它看起来很像一个vim错误,特别是带有内部vim转义序列的错误,这些转义序列都以
\x80
开头(所讨论的字符的第二个字节是
\x80
),并对空值、函数键或
\x80
字节本身进行编码。我想您可以深入研究vim源代码,在那里找到这个字节是如何转义的,并尝试用这个转义代码替换
的最后一个字节,或者等到这个字节被修复(尽管我不希望很快就会修复:这里引用的是todo.txt)

UTF-8:映射第二个字节为0x80的多字节键时不会出现 工作。(托尼·梅切林克,2007年3月2日)


所以,你看,这个问题已经知道四年了,还没有解决。)

这不是问题所在
imap a ab
inoremap a ab
两种方法都能很好地工作,但都不想使用。显然,问题在于重新映射“as
imap a”
的效果与预期一致。您使用的编码是什么?(
:echo&enc
)这是utf-8,我的$LANG是en_US.utf-8。谢谢你的尝试,但这不起作用。递归不是问题<代码>imap a ab
工作正常。问题在于重新映射卷曲的引号:'(U+2018)
imap'a
不包含递归,并以同样的方式失败。@caminoix
imap something
工作正常这一事实不应使您编写
imap something
。使用
inoremap
除非您能回答“为什么我不能在这里使用
nore
”这个问题,否则它将节省您的时间,因为可以相互干扰的映射数量会越来越多。明白。我想我太专注于我目前的问题了,以至于不能欣赏一个一般的,如果不是很相关的建议。哦……就是这样。哦,天哪。哦,非常感谢你的澄清!这几乎是我需要知道的全部,即使我可能希望有一个不同的解决方案。@caminoix讨论了用CSI序列替换非常有限的
\x80
vim自身转义,因为当前实现存在更多的问题:与可能的修饰符的绝对值相比+smth快捷方式,如
。。。vim几乎不支持任何一个,而CSI支持所有这些。当这段代码最终被修改时,我想你的问题会消失,尽管它可能要等到vim-7.4甚至vim-8.0才会发生。