vote up 3 vote down star

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?

flag

38% accept rate

3 Answers

vote up 6 vote down check

~/.vimrc

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

More info about key mapping and external commands.

link|flag
is it possible to remove the extension of the file? so that I can do like java %(remove .java)? – karmic Sep 28 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 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 at 12:24
vote up 3 vote down

(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>
link|flag
vote up 2 vote down

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.

link|flag

Your Answer

Get an OpenID
or
never shown

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