Vim: Как избавиться от карты, специфичной для типа файла?

Vim: Как избавиться от карты, специфичной для типа файла?

Редактировать:Рабочая версия.

Я нанес на карту [[и]]мои собственные функции:

nmap <silent> ]] :let &tabstop += 1 <CR> :echo 'tabstop =' &tabstop <CR>
nmap <silent> [[ :let &tabstop -= &tabstop > 1 ? 1 : 0 <CR> :echo 'tabstop =' &tabstop <CR>

Однако, согласно :verbose map [[им, они переопределяются /usr/share/vim/vim72/ftplugin/php.vim. Как мне избавиться от отображений PHP, сохранив свои собственные? Я пробовал

autocmd FileType php unmap! [[
autocmd FileType php unmap! ]]

в соответствии сруководство, но затем я получаю сообщения об ошибках при запуске Vim:

Error detected while processing FileType Auto commands for "php":
E31: No such mapping
E31: No such mapping
Press ENTER or type command to continue

С использованиемnnoremapвместо nmapне помогает.

Ввод сопоставлений в~/.vim/after/ftplugin/php.vimтоже не сработало. vim -Vпоказывает:

...
finished sourcing /usr/share/vim/vim72/ftplugin/php.vim
...
finished sourcing /home/user/.vim/after/ftplugin/php/php.vim

Итак, он действительно находит предполагаемое переопределение.

Объединение nnoremapи сценарий «после» тоже не работают.

решение1

Конкретные определения (специфичные для типа файла, специфичные для проекта, ...) всегда должны быть объявлены локальными для текущего буфера. Это достигается с помощью <buffer>квалификатора для отображений и сокращений (команды используют -b, а меню требуют специального плагина для эмуляции этого, переменные имеют префикс b:, а настройки должны быть установлены (sic) с помощью :setlocal).

Более того, чтобы объявить его (т. е. специфичное для ft определение) локальным для буфера, вы можете использовать autocommand, как вы, кажется, и делаете, однако я бы рекомендовал вместо этого использовать ftplugins. Это гораздо более удобно для поддержки, и все правила, касающиеся переопределения различных определений (сопоставлений и т. д.), уже учтены.

" => ftplugin/php/php_my_stuff.vim
" headers guards...
...
:nnoremap <silent> <buffer> ]] :setlocal ts+=1<cr>:set ts?<cr>
:nnoremap <silent> <buffer> [[ :setlocal ts-=1<cr>:set ts?<cr>

PS: Для такого вопроса лучше подошли бы SO или SU.

решение2

Я бы попробовал использовать подсказки для отмены проверок плагинов по умолчанию, описанныхздесь. Подводя итог: поместите файл плагина сопоставлений в конец пути выполнения (например, ~/.vim/after/ftplugin/php.vim), чтобы переопределить глобальные сопоставления.

решение3

вы пробовали использовать nnoremapвместо nmapв вашем.vimrc

nnoremap <silent> ]] :let &tabstop += 1 <CR> :echo 'tabstop =' &tabstop <CR>
nnoremap <silent> [[ :let &tabstop -= &tabstop > 1 ? 1 : 0 <CR> :echo 'tabstop =' &tabstop <CR>

Связанный контент