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 固有の定義を)、あなたが行っているように 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>

関連情報