我刚刚在.vimrc
中重新映射了一些键,我得到了一些更糟糕的行为。
当我在视觉模式下选择文本并点击删除键时,它会用"包围突出显示的文本。。。
这是我的.vimrc
的相关部分
"Using Vundle
Bundle 'tpope/vim-surround'
let mapleader= ","
let g:mapleader= ","
set backspace=eol,start,indent
"""""""""""""""""""""""""""""""""""""""""""""""""""
" => Surround Vim Shortcuts
"""""""""""""""""""""""""""""""""""""""""""""""""""
vmap ' S'
vmap " S"
vmap { S{
vmap } S}
vmap ( S(
vmap ) S)
vmap [ S[
vmap ] S]
" tags
vmap < S<
vmap > S>
" addressing the problem introduced by tags
vnoremap << <
vnoremap >> >
map <leader>s' ysiw'
map <leader>s" ysiw"
map <leader>s( ysiw)
map <leader>s[ ysiw]
map <leader>s{ ysiw}
map <leader>d' yss'
map <leader>d" yss"
map <leader>d( yss)
map <leader>d[ yss]
map <leader>d{ yss}
vmap <Leader>S <Plug>VSurround
示例:
def persisted?
false
end
# I select it in visual mode, hit delete and it becomes:
"def persisted?
false
end"
我知道很多这种配置都是个人偏好,所以欢迎任何建议,但更重要的是,我为什么会有这种行为?
当我尝试:verbose map <BS>
时,我得到
s <BS> * b<BS>
Last set from ~/<...>/after/plugin/snipMate.vim
x <BS> "-d
这告诉我有一个选择模式映射,它将输入一个"b"(删除所选文本并进入插入模式),然后是插入模式<BS>;则CCD_ 4意味着CCD_;这个映射是由snipMate.vim定义的。还有一个到"-d
的Visual模式映射。由于没有*
,因此将对其进行重新映射。
有些东西坏了:我不知道第二个映射是从哪里来的。
也许如果我有第二张地图,你也可以。如果是这样的话,那么"
就会被映射(在vimrc文件中定义)到S"
,我猜surround.vim会对此做些什么。这或多或少地解释了你所看到的。我不确定vim在那之后是什么模式,所以我不确定最后的-d
会做什么。
试试:xunmap <BS>
或:xnoremap <BS> "-d
,看看它是否有帮助。如果是这样的话,试着把它放在vimrc文件的末尾。如果不起作用,请尝试将其放入VimEnter自动命令中。
:help :map
:help map-modes
它对我有效,所以可能是某种冲突。我对Vim还比较陌生,但到目前为止,我已经多次解决插件和配置冲突。插件和用户配置都可能相互影响,所以有时你可能会遇到非常奇怪的行为。
对我来说,一直在努力的是逐步消除问题的可能原因。您可以重命名vimrc
文件以防止Vim找到它,然后查看问题是否仍然存在。如果没有,则说明vimrc
中的某些内容不能很好地与插件配合使用。在这种情况下,请尝试注释vimrc
中的行,以缩小问题的原因(确保创建备份)。
如果问题不是由vimrc
引起的,那么很可能是插件冲突。尝试从Vim插件路径中的plugin
文件夹中移除插件文件,看看问题是否仍然存在。
对于记录,我使用最新的MacVim(快照72),当我放入
:verbose map<BS>
时,输出为:
v <BS> "-d
我按照@benjifisher的建议做了,并添加了一行:
xnoremap <BS> "-d
到我的.virc。现在的输出是
x <BS> *"-d
s <BS> "-d
和删除现在工作的方式应该。所以…谢谢!