Wednesday, May 13, 2009

(Un)Commenting Multiple Lines in a Script/Program

Until I come to know about markers in VIM, I find
it much difficult to comment/uncomment multiple
line in script/program. Especially when a programming
language only supports one line comment.
For example: # (Pound) is used as a comment in shell scripting
Suppose, we want to comment lines 8-12 in following
shell script


1 #!/bin/bash
2
3 # shut some DoS stuff down
4 echo 1 > /proc/sys/net/ipv4/tcp_syncookies
5 echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
6 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
7
8 # increase the local port range
9 echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
10
11 # increase the SYN backlog queue
12 echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
13
14 echo 0 > /proc/sys/net/ipv4/tcp_sack
15 echo 0 > /proc/sys/net/ipv4/tcp_timestamps



we just need to do following key presses in command mode:

8Gma12mb

:'a,'bs/^/#/


Now those lines are commented

7
8 ## increase the local port range
9 #echo 1024 65535 > /proc/sys/net/ipv4/ip_local_port_range
10 #
11 ## increase the SYN backlog queue
12 #echo 2048 > /proc/sys/net/ipv4/tcp_max_syn_backlog
13


We can uncomment those lines too, just by giving following
command:

:'a,'bs/^#//



Now, we see how this works
1) 8Gma12Gmb
The above line is used to mark beginning (8G- Goto 8, ma- Mark as 'a') line
and end (12G- Goto 12, mb- Mark as 'b') line.
2) :'a,'bs/^/#/
Run subtitute command s on lines started with mark 'a' ('a) and ended with
mark 'b' ('b')

Note: To comment multiple lines in C/C++/Java without /* */

:'a,'bs/^/\/\//

1 comment:

Anonymous said...

This tip of Vim really helped me. :)
It is very useful in commenting multiple lines.

Thanks! a lot for such a nice tip.