Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get name of the current file in Vim

Tags:

vim

I'm trying to find the name of the file I'm editing inside of Vim. So I can use it to map F5 to compile this file. Would of course be great if I could recognize the file format, and choose compiler accordingly, but really not necessary. If I find the name of the file, I could do that myself. But I really can't find any way to get the name of the file I'm editing.

I know of the :make command, and have already mapped that, but for small scripts/testing programs, I really don't want to first have to write a simple makefile.

like image 489
martiert Avatar asked Apr 12 '09 00:04

martiert


People also ask

How do I find the current file name and number of lines in Vim?

Pressing ctrl-g will reveal the filename, current line, the line count, your current position as a percentage, and your cursor's current column number.

How do I rename the current file in Vim?

Navigate to the file, press R , and change the name. Press Enter to edit the file.

How do I get full path in Gvim?

Pressing 1 followed by Ctrl + G shows the full path of the current file.

How do I view a full file in vi editor?

To use vi on a file, type in vi filename. If the file named filename exists, then the first page (or screen) of the file will be displayed; if the file does not exist, then an empty file and screen are created into which you may enter text.


2 Answers

You can use the % character in vim commands to get the current filename with the extension. For example,

:!javac %

to run javac on the current file.

You can find out more with

:help filename-modifiers

like image 129
sluukkonen Avatar answered Sep 22 '22 22:09

sluukkonen


I'm trying to find the name of the file I'm editing inside of vim.

For the current buffer this will give you name of the file,

echo "You're editing " bufname("%") 

(just put it in some file.vim, and source it ":so %". But I don't think this is what you need.

So I can use it to map F5 to compile this file, for testing purposes. Would of course be great if I could recognize the file format, and choose compiler accordingly, but really not necessary. If I find the name of the file, I could do that myself. But I really can't find any way to get the name of the file I'm editing.

You could do several things. If vim recognizes the filetype you're editing, you could map F5 to your compiler command and put that command in its specific ftplugin directory, so it will be valid only for that filetype. For example, you put

nmap <f5> :!compilername %<cr> 

in cpp.vim, fortran.vim, python.vim, etc. The % gives the name of the current file you're editing. This will execute the compiler just like if you called compilername file.cpp in the command prompt.

Of course, compilername will be different for each filetype; you're not going to compile fortran with cpp compiler, you put fortrancompiler % in that case.

That is one option. You could also try according to extension set autocmd commands in your .vimrc so it recognizes the filetype according to extension of the file. This is all standard usage of vim, nothing uncommon. Now, I'm not sure how you'd like to go about this, so I'll just point you to Vim Wiki where you can find all kinds of articles that cover this (and also a few tips for some compilers).

I know of the :make command, and have already mapped that, but for small scripts/testing programs, I really don't want to first have to write a simple makefile.

Yes, that seems like overkill. Personally (when I'm on Windows), I find simple batch file much easier to write for most things except big projects. If the program is in one or two files, I just compile it using some oneliner mapping.

like image 43
Rook Avatar answered Sep 26 '22 22:09

Rook