vim 列编辑高级用法

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 刻录的时候, 记得先^, 在开始刻录