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