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및 "after" 스크립트도 작동하지 않습니다.

답변1

특정 정의(파일 형식별, 프로젝트별 등)는 항상 현재 버퍼에 대해 로컬로 선언되어야 합니다. 이는 <buffer>매핑 및 약어에 대한 한정자를 사용하여 수행됩니다(명령은 을 사용 -b하고 메뉴는 이를 에뮬레이트하기 위해 특정 플러그인이 필요하며 변수 앞에는 가 붙고 b:설정은 으로 설정됩니다 :setlocal).

게다가 버퍼에 로컬로 선언하려면(예: ft 특정 정의) 자동 명령을 사용할 수 있지만 대신 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>

추신: 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>

관련 정보