Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Is it possible to set hotkey for specific file types in vim.

For example, if I am editing a .java file, I'd like vim to run javac .java when I press 5.

Is this possible?

share|improve this question
add comment

3 Answers

up vote 6 down vote accepted

~/.vimrc

autocmd FileType java map <F5> :! javac %<cr>

More info about key mapping and external commands.

share|improve this answer
    
is it possible to remove the extension of the file? so that I can do like java %(remove .java)? –  vonhogen Sep 28 '09 at 8:01
    
I doubt so, but you can make a shortcut to a script which will strip the extension and execute javac on the result. –  Andrejs Cainikovs Sep 28 '09 at 8:05
2  
@karmic: Use something like autocmd FileType java map <F5> :exe '! javac ' . expand('%:r')<CR> See :help expand() for more information. –  Al. Sep 28 '09 at 12:24
add comment

I don't have any direct experience writing anything like this from scratch with Vim, but here's what you'll want to look for examples to follow.

You probably want a filetype plugin (ftplugin) for .java files:

A filetype plugin is like a global plugin, except that it sets options and defines mappings for the current buffer only. See |add-filetype-plugin| for how this type of plugin is used.

And use it with a mapleader+hotkey:

To define a mapping which uses the "mapleader" variable, the special string "" can be used. It is replaced with the string value of "mapleader". If "mapleader" is not set or empty, a backslash is used instead. ... To define a mapping which uses the "mapleader" variable, the special string "" can be used. It is replaced with the string value of "mapleader". If "mapleader" is not set or empty, a backslash is used instead.

You might have a look at the Vim JDE scripts, or this guide on configuring Vi(m) for Java development. This page has some information on using javac in Vim.

share|improve this answer
add comment

(I fail to understand the point of the dichotomy between SO and SU for such questions... Anyway:) Your question has already been answered, a few days later, on SO: ftplugins + local mappings/abbreviations/commands are the way to go.

Regarding javac call, Just use %< to obtain the filename without the extension. A first correct mapping thus becomes:

:nnoremap <buffer> <f5> :!javac %<<cr>

But prefer instead to rely on the quickfix mode with:

:setlocal makeprg=javac\ $*
:nnoremap <buffer> <f5> :make %<<cr>
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.