小知识:vi如何使用列编辑模式快速插入


经常需要用到列编辑这种操作,现在很多超文本的编辑器都可以轻松实现。
但有时需要在vi界面直接使用,但是vi的列编辑操作因不常使用总是忘记现查。
这次干脆记录下加深印象。
vi编辑某个文本时,比如修改一个oracle的参数文件,历史实验时取的实例名字是jyzhao, 如今实验我已经成功改成prod了,如下:

*.audit_file_dest='/opt/app/oracle/admin/prod/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.4.0'
*.control_files='+DATA/prod/controlfile/current.265.1083233741'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_file_name_convert='+data/prod','+data/mynas'
*.db_name='prod'
*.db_unique_name='mynas'
*.diagnostic_dest='/opt/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=prodXDB)'
*.enable_goldengate_replication=TRUE
*.fal_server='prod'
prod1.instance_number=1
prod2.instance_number=2
*.log_archive_config='DG_CONFIG=(prod,mynas)'
*.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mynas'
*.log_archive_dest_2='SERVICE=prod VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prod'
*.log_archive_dest_state_1='ENABLE'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='+data/prod','+data/mynas','+fra/prod','+fra/mynas'
*.open_cursors=300
*.pga_aggregate_target=1290797056
*.processes=150
*.remote_listener='jyrac-scan:1521'
*.remote_login_passwordfile='exclusive'
*.sga_target=2008023040
*.standby_file_management='AUTO'
prod2.thread=2
prod1.thread=1
prod1.undo_tablespace='UNDOTBS1'
prod2.undo_tablespace='UNDOTBS2'

上面是改完的,如果名字不匹配启动nomount阶段就会报错,这里不展开。
直接演示下vi如何列编辑改回去的全过程吧,首先vi这个文件进入,使用:set nu显示行号方便之后操作:

  1 *.audit_file_dest='/opt/app/oracle/admin/prod/adump'
  2 *.audit_trail='db'
  3 *.cluster_database=true
  4 *.compatible='11.2.0.4.0'
  5 *.control_files='+DATA/prod/controlfile/current.265.1083233741'
  6 *.db_block_size=8192
  7 *.db_create_file_dest='+DATA'
  8 *.db_domain=''
  9 *.db_file_name_convert='+data/prod','+data/mynas'
 10 *.db_name='prod'
 11 *.db_unique_name='mynas'
 12 *.diagnostic_dest='/opt/app/oracle'
 13 *.dispatchers='(PROTOCOL=TCP) (SERVICE=prodXDB)'
 14 *.enable_goldengate_replication=TRUE
 15 *.fal_server='prod'
 16 prod1.instance_number=1
 17 prod2.instance_number=2
 18 *.log_archive_config='DG_CONFIG=(prod,mynas)'
 19 *.log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mynas'
 20 *.log_archive_dest_2='SERVICE=prod VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=prod'
 21 *.log_archive_dest_state_1='ENABLE'
 22 *.log_archive_dest_state_2='ENABLE'
 23 *.log_file_name_convert='+data/prod','+data/mynas','+fra/prod','+fra/mynas'
 24 *.open_cursors=300
 25 *.pga_aggregate_target=1290797056
 26 *.processes=150
 27 *.remote_listener='jyrac-scan:1521'
 28 *.remote_login_passwordfile='exclusive'
 29 *.sga_target=2008023040
 30 *.standby_file_management='AUTO'
 31 prod2.thread=2
 32 prod1.thread=1
 33 prod1.undo_tablespace='UNDOTBS1'
 34 prod2.undo_tablespace='UNDOTBS2'

比如这里先改16、17两行,直接:16到16行,然后ctrl + v进入列编辑(-- VISUAL BLOCK --)模式,向下箭头移动光标,选择需要修改的这两列,待光标在我们要修改的列上闪烁时,使用shift + i批量插入,这里需要特别注意的是,插入时好像只改1行?不要担心,只要前面操作ok,改完后直接ESC键,修改就会同步到我们选择的所有行:

 16 jyzhao1.instance_number=1
 17 jyzhao2.instance_number=2

同样操作,对31~34行进行修改:

 31 jyzhao2.thread=2
 32 jyzhao1.thread=1
 33 jyzhao1.undo_tablespace='UNDOTBS1'
 34 jyzhao2.undo_tablespace='UNDOTBS2'

是不是很简单?
好了,现在可以自己练习再改回去吧_