Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In a text file I need to comment out all lines by adding a ";" as first character of each line. What is a good way to do this? I thought of Vim's visual block mode, but I couldn't find a "select all" option and marking several hundred lines manually also isn't great ;-) Any idea? I have nano, vi and vim at hand, I would prefer one of those for this task.

share|improve this question
up vote 8 down vote accepted

In Vim: gg0<ctrl-v>GI;<Esc>

share|improve this answer
Thank you, that works great, but I don't understand (and according to my testing also don't need) the "gg" at the beginning? – stefan.at.wpf Sep 7 '12 at 15:40
gg goes to the first line. – jw013 Sep 7 '12 at 15:45
ah, thanks! [some chars...] – stefan.at.wpf Sep 7 '12 at 15:52
Why is the 0 necessary? gg also goes to the beginning of the line (unless there's a configuration option I'm not aware of?) – Izkata Sep 7 '12 at 20:31
@gorkypl: While in insert mode, you'll just see your edit in the first line. Once you hit <kbd>Esc</kbd>, it will apply the edit to the whole block. – echristopherson Sep 9 '12 at 18:55

In Vim you can also just do the global replace on the start of all lines:

share|improve this answer
explanation: : to enter Ex command mode, % to specify all lines in the file, s/^/;/ to insert a ; at the beginning of every line. The % is a range, it means all lines. type :help ranges in vim to get more information about ranges in 4. Ex command-line ranges – cas Sep 8 '12 at 1:45

For a simple task like this you could use sed or perl. For a small footprint, use sed for this simple task:

sed -i.old -e 's/^/;/' file

This preserves a copy of the original file as "*.old" and adds a ";" at the beginning of every line.

In the event that your sed isn't a GNU version (as is the case on many Unix variants), it is likely that you won't have the inplace (-i) option. Either simply redirect to a new output file or use Perl as perl -pi.old -e 's/^/;/' file

share|improve this answer
thanks, a nice way for a script, for now I prefer the vim solution as I need to edit the file anyway and need an editor for that :-) – stefan.at.wpf Sep 7 '12 at 15:52

I would add to jw013's answer by changing the replace to


That can be rerun as many times as you like and will not add semicolons endlessly to the beginning of lines already having it in the beginning.

It can also be used with sed or perl with the colon and percentage sign removed.

It replaces in all lines (%) every line that starts with something other than a semicolon to start with a semicolon and then the character that it started with originally (to keep it in the file).

Both commands (mine and jw013's) should be done in command mode, which is the default start mode of vi/vim and can be accessed with the key when in Insert or replace modes.

share|improve this answer
Good to understand your options, and choose what's appropriate but I'd often prefer to not avoid the double commenting because then I can see what was previously already commented, and I can reverse the operation. – mc0e Oct 17 '14 at 5:40

You can do it by using vi editor only -

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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