created January 7, 2002 · complexity basic · author Steve Downing · version 5.7
I found this useful when I was learning Java: it simply inserts the current filename without the extension at the cursor position, when you are in insert mode.
:inoremap \fn <C-R>=expand("%:t:r")<CR>
To keep the extension use:
:inoremap \fn <C-R>=expand("%:t")<CR>
To insert the absolute path of the directory the file is in use:
:inoremap \fn <C-R>=expand("%:p:h")<CR>
To insert the relative path of the directory the file is in use:
:inoremap \fn <C-R>=expand("%:h")<CR>
I often use <C-R>% when in insert mode. It does the same thing, except you also get your file extension.
The % variable for file name is also helpful from the command prompt (: at the bottom). I use it for checking the syntax of source code before using it. For example, if I am editing a perl module, this is helpful:
:w|!perl -c %
This saves the file (w), and executes perl -c on the current file which runs a syntax check.
Yet another useful % application: suppose your source-files reside in a '.../src' (or '...\src') directory. Now this line will insert the package-structure of you current Java-file at the cursor position:
:inoremap \jip <C-R>=substitute(substitute(expand("%:p:h"), "^.*[/\\\\]src[/\\\\]", "", ""), "[/\\\\]", ".", "g")<CR>
(Four backslashes because you need to escape them twice.)
- Use single quotes instead of double quotes to avoid need for extra backslashes:
- BTW, matchstr(expand("%:p:h"), '^.*[/\\]src[/\\]\zs.*') is simpler.