Vim Tips Wiki

Add/change file extension in current buffer

1,624pages on
this wiki
Add New Page
Talk0 Share
Tip 768 Printable Monobook Previous Next

created August 13, 2004 · complexity basic · author Dave Silvia · version 5.7

Say I have a file that was loaded with:

:view ~/thud/foo/bar.c

I now want to save it as, say ~/thud/foo/bar.c.txt

This can be done using these commands.

command! -nargs=1 AddExt execute "saveas ".expand("%:p").<q-args>
command! -nargs=1 ChgExt execute "saveas ".expand("%:p:r").<q-args>

The following saves the current buffer's file as the current buffer's filename with '.c' appended.

:AddExt .c

The following saves the current buffer's file as the current buffer's filename with the extension changed to '.txt'.

:ChgExt .txt



:w %:p.txt will save the file with .txt added after the existing extension.
:w %:p:r.txt will replace the extension with txt.

Speaking up for mnemonics, some people, newbies especially, have trouble remembering !/*%^, much less, what it may or may not mean. I, for one, find ChgExt easier to remember, not only for use, but for meaning, than w %:p:r.<ext>. When I see the command in my vimrc 2 years from now, I won't have any trouble using it or remembering what it's for. Nor will I have to say, 'Let's see, I did that once 2 years ago... gosh, I'll just look it up again in :h expand' (if I remember that I need to look in :h expand). Let's not loose track of one of the major strongpoints of commands: they make tasks easier. It's the same reason things like aliases and functions exist in shells.

Now if you want to change the command to say something like

command! -nargs=1 ChgExt :w %:p:r.<args>

that's another matter. But to say 'use this anti-mnemonic formula instead of the command' is not very helpful.

Also, the original question was how to ':saveas' not ':w'. One changes the buffer to the new file, the other does not. So, to be correct, the command should be

command! -nargs=1 ChgExt :saveas %:p:r.<args>

If you have a mind for anti-mnemonics and the like, great! But don't forget many people don't.

One alternative:

:w %<.txt

will write to ~/thud/foo/bar.txt

think of a '<' as 'some backspaces' :help <>

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random Wiki