简体   繁体   中英

Format code with VIM using external commands

I know that using VIM I can format C++ code just using

gg=G

Now I have to format 30 files, so doing it by hand becomes tedious. I had a look how to do it passing external commands to VIM, so I tried

vim -c gg=G -c wq file.cpp

but it does not work.

Can you give me a hint?

Thanks

为什么不在缓冲区中加载所有文件并使用bufdo在所有文件上执行命令?

:bufdo "execute normal gg=G"

Change -c gg=G to -c 'normal! gg=G' -c 'normal! gg=G' . -c switch accepts only ex mode commands, gg=G are two normal mode commands.

I prefer a slight change on the :bufdo answer. I prefer the arg list instead of the buffer list, so I don't need to worry about closing current buffers or opening up new vim session. For example:

:args ~/src/myproject/**/*.cpp | argdo execute "normal gg=G" | update
  • args sets the arglist, using wildcards ( ** will match the current directory as well as subdirectories)
  • | lets us run multiple commands on one line
  • argdo runs the following commands on each arg (it will swallow up the second | )
  • execute prevents normal from swallowing up the next pipe.
  • normal runs the following normal mode commands (what you were working with in the first place)
  • update is like :w , but only saves when the buffer is modified.

This :args ... | argdo ... | update :args ... | argdo ... | update :args ... | argdo ... | update pattern is very useful for any sort of project wide file manipulation (eg search and replace via '%s/foo/bar/ge' or setting uniform fileformat or fileencoding ).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM