편집하다:작업 버전.
나는 매핑 [[
했고]]
내 자신의 기능:
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>