Использование MacVim и Surround.vim — Backspace в визуальном режиме окружает текст

Я только что переназначил некоторые клавиши в моем .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"

Я знаю, что многие из этих конфигураций являются личными предпочтениями, поэтому любые советы приветствуются, но, что более важно, почему я получаю такое поведение?


person Joe Susnick    schedule 27.02.2014    source источник
comment
Что вам говорит :verbose map <BS>? Используете ли вы плагин snipmate?   -  person benjifisher    schedule 28.02.2014
comment
‹code›v ‹BS› -d‹/code› Единственная проблема в том, что я понятия не имею, откуда это взялось. В моем .vimrc нигде не упоминается ‹BS›. ‹br› У меня установлен плагин snipmate.   -  person Joe Susnick    schedule 28.02.2014
comment
Если вы действительно использовали :verbose, то он также должен был сообщить вам, какой файл устанавливает сопоставление, а не только то, что это за сопоставление. Если вы не используете очень старый Vim?   -  person Ben    schedule 28.02.2014


Ответы (3)


Когда я пытаюсь :verbose map <BS>, я получаю

s  <BS>        * b<BS>
    Last set from ~/<...>/after/plugin/snipMate.vim
x  <BS>          "-d

Это говорит мне о том, что существует сопоставление режима выбора, которое введет «b» (удаление выделенного текста и переход в режим вставки), за которым следует режим вставки ‹BS>; * означает, что b<BS> не будет переназначаться; и это сопоставление определяется snipMate.vim. Существует также сопоставление визуального режима с "-d. Поскольку * нет, он будет переназначен.

Что-то сломалось: я не могу понять, откуда взялось это второе отображение.

Может быть, если у меня есть второе сопоставление, то и у вас тоже. Если это так, то " сопоставляется (определено в вашем файле vimrc) с S", и я думаю, что Surround.vim что-то с этим делает. Это более или менее объясняет то, что вы видите. Я не уверен, в каком режиме находится vim после всего этого, поэтому я не уверен, что будет делать -d в конце.

Попробуйте :xunmap <BS> или :xnoremap <BS> "-d и посмотрите, поможет ли это. Если это так, попробуйте поместить его в конец вашего файла vimrc. Если это не сработает, попробуйте поместить его в автокоманду VimEnter.

:help :map
:help map-modes
person benjifisher    schedule 28.02.2014

Это работает для меня, так что это, вероятно, какой-то конфликт. Я все еще относительно новичок в Vim, но мне уже несколько раз приходилось разбираться с конфликтами плагинов и конфигураций. Плагины и пользовательские конфигурации могут влиять друг на друга, поэтому иногда вы можете столкнуться с действительно странным поведением.

Что работало для меня, так это постепенное устранение возможных причин проблемы. Вы можете переименовать файл vimrc, чтобы Vim не смог его найти, а затем посмотреть, сохраняется ли проблема. Если это не так, что-то в вашем vimrc не работает с вашими плагинами. В этом случае попробуйте закомментировать строки вашего vimrc, чтобы сузить причину проблемы (обязательно создайте резервную копию).

Если проблема не была вызвана вашим vimrc, скорее всего, это конфликт плагинов. Попробуйте удалить файлы подключаемых модулей из папки plugin в пути к подключаемым модулям Vim и посмотрите, сохраняется ли проблема.

person Wiener Boat    schedule 27.02.2014

For the record I'm using the newest MacVim (Snapshot 72) and when I put in

:verbose map <BS>
the output is:

v <BS>  "-d

Я сделал то, что предложил @benjifisher, и добавил строку:

xnoremap <BS> "-d  

в мой .vimrc. Выход сейчас

x  <BS>      *"-d  
s  <BS>       "-d  

и удалить теперь работает так, как должно. Так что спасибо!

person Joe Susnick    schedule 28.02.2014