如何更改不同文件类型的nnoremap?

时间:2017-06-06 14:55:19

标签: vim vi

当我在PHP文件中点击<leader>r时,我想这样做:

 nnoremap <leader>r ifile_put_contents(ini_get('error_log'), '');<cr>error_log(print_r(, true));<esc>

但是当我在JS文件中执行<leader>r时,我想这样做:

 nnoremap <leader>r iconsole.log();<esc>

我怎么能这样做?

我还想将光标放在console.log/print_r内。知道如何做到这一点吗?

2 个答案:

答案 0 :(得分:2)

您可以使用自动寻线并仅映射到缓冲区。这是一个例子:

augroup quick_debug
  autocmd!
  autocmd FileType php nnoremap <buffer> <leader>r ifile_put_contents(ini_get('error_log'), '');<cr>error_log(print_r(, true));<esc>
  autocmd FileType javascript nnoremap <buffer> <leader>r iconsole.log();<esc>

augroup END

要移动光标,您可以在<left>之前使用<right><esc>。像这样:nnoremap <buffer> <leader>r iconsole.log();<left><left><esc>

如果您不介意使用插件,可以查看UltiSnips并使用代码段代替映射。

答案 1 :(得分:2)

您可以通过预先:autocmd Filetype {filetype} ...来定义某些文件类型,然后将其放入~/.vimrc。但是,当您为各种文件类型添加映射和其他设置时,这会变得难以处理。最好将命令放入~/.vim/ftplugin/{filetype}_mappings.vim。 (这要求您拥有:filetype plugin on。)