
Редактировать:Рабочая версия.
Я нанес на карту [[
и]]
мои собственные функции:
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>