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/^/\/\//

Saturday, May 9, 2009

Read Command Output in Vim

In order to insert output of a command while in Vim
editor. Just give following command.

:r !
any_command

Replace any_command with the command you want to use.


22
23

Suppose we want insert date at line number 23,
goto line number 23, by pressing
G23
Then type following command
:r !date

22
23 Sat May 9 20:15:56 IST 2009