vim 列编辑高级用法

November 7, 2012

vim 的列编辑,一般人知道是 ctrl+v 即可进入列编辑,但是如下的需求就有点难以满足了.比如有这样一个文本,是一个表的字段定义,我需要将每个字段名称加上单引号

            file_name               text,      
            record_type             integer,   
            serial                  text,      
            card_number             text,      
            voucher_expiration_time text,      
            card_home               integer,   
            card_attr               integer,   
            destination_id          text,      
            destination_attr        integer,   
            destination_attr_detail integer,   
            destination_type        integer,   
            balance_type            integer,   
            pay_type                integer,   
            recharged_account_home  integer,   
            recharge_amount         integer,   
            recharge_time           timestamp

前一个单引号很好加, ctrl+v a' 就可以了

            'file_name               text,      
            'record_type             integer,   
            'serial                  text,      
            'card_number             text,      
            'voucher_expiration_time text,      
            'card_home               integer,   
            'card_attr               integer,   
            'destination_id          text,      
            'destination_attr        integer,   
            'destination_attr_detail integer,   
            'destination_type        integer,   
            'balance_type            integer,   
            'pay_type                integer,   
            'recharged_account_home  integer,   
            'recharge_amount         integer,   
            'recharge_time           timestamp

可是后一个就无奈了,没法直接用列编辑加入了,因为后面有字段类型拦着起

要么一个一个加,要么有多余空格

            'file_name               text,      
            'record_type             integer,   
            'serial                  text,      
            'card_number             text,      
            'voucher_expiration_time text,      
            'card_home               integer,   
            'card_attr               integer,   
            'destination_id          text,      
            'destination_attr        integer,   
            'destination_attr_detail integer,   
            'destination_type        integer,   
            'balance_type            integer,   
            'pay_type                integer,   
            'recharged_account_home  integer,   
            'recharge_amount         integer,   
            'recharge_time           timestamp

最佳的办法,使用寄存器!

光标落在第一个单词 file_name 上(在中间不要在第一个字母) 按下 qa,此时进行的操作,会记录到寄存器 a 中,而后按下bi'<Esc>wea'<Esc>(这个操作就是给单词两边加上’的),最后,按下 q,此时操作就会记录在 a 寄存器里.

试下把光标移到第二个单词,按下@a,是不是单引号也同样加上去了?

还没结束,我需要在 visual 模式下也能用,否则还是很麻烦. 修改 vim 配置文件,加上热键

"将重复使用寄存器a中的命令映射到 `
nnoremap ` @a
"` 在 visual 模式下可用
vnoremap ` :normal @a

注意了,我映射的热键是 `,不是’

使用的时候,还是要把操作复制到 a 寄存器中, 而后 visual 选中,按下 `,最后按下回车,一切搞定

            'file_name'               text,      
            'record_type'             integer,   
            'serial'                  text,      
            'card_number'             text,      
            'voucher_expiration_time' text,      
            'card_home'               integer,   
            'card_attr'               integer,   
            'destination_id'          text,      
            'destination_attr'        integer,   
            'destination_attr_detail' integer,   
            'destination_type'        integer,   
            'balance_type'            integer,   
            'pay_type'                integer,   
            'recharged_account_home'  integer,   
            'recharge_amount'         integer,   
            'recharge_time'           timestamp

最后再提醒一次,因为 visual 时候,对每行的操作,默认是从^,也就是顶端开始的,qa 刻录的时候,记得先^,在开始刻录


comments powered by Disqus