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 특정 정의) 자동 명령을 사용할 수 있지만 대신 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>

관련 정보