vim真正的高阶用法(可视模式,替换模式,末行模式)

vim作为一个强大的,可靠性,效率性极高的文本编辑器,深受使用Linux系统的用户的喜欢,可以毫不夸张的说,不会使用vim文本编辑器,纵使sed,awk,grep三剑客使用的再6,面对海量的文本内容,也是徒呼无奈。

本文旨在揭示vim的神秘面纱,普通的用法并不能提高多少文本编辑的效率,要使用就使用高阶的技巧,对吧。因此,本文不就vim的历史以及它的基础用法做探讨,仅讨论高阶技巧。因此,无vim使用基础的同学可退出(无情劝退!!!!)。

首先,就vim的模式来说,大致分为六种:

一,正常模式

也就是使用vim打开一个文本的时候,所进入的模式,这个模式也可称之为默认模式,基本模式,其他的任意模式均可以通过esc键回退到正常模式

在该模式下,键盘可使用的按键有:v,p,x,cc,d,dd,i,o,r,R等等, 具体的用法是基础知识,请自行百度。

二,命令模式

在正常模式下输入“/”进入命令行模式,在该模式下可以进行搜索,替换等。该模式主要是针对的是文本内容。

三,末行模式

在正常模式下输入“:” 这个模式叫末行模式,可进行退出vim,vim的设置等等vim的内部交互命令输入。

四,插入模式

这个模式是相对正常模式的,文本文档通过a,i,o(大写和小写共三对)六个字母进入可编辑状态,也是使用率最高的模式

五,可视模式(也有人叫它视图模式)

此模式针对的是块编辑,也就是选定某一块区域,连续的,快速的,高效的编辑文本。快速选定文本文档内的特定内容全靠这个模式

六,替换模式

快速的替换文本文档的某些内容,替换方式可控,可自定义。修改文档(注意,不是编写文档)时的常用模式。

 



vim的高阶用法主要集中在上面所说的二,三,五,六哲几个模式,因此,按照模式划分,依次讲解。讲解用例使用centos系统root根目录下最常见的文件anaconda-ks.cfg进行讲解

文件内容如下:

#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
network  --hostname=localhost.localdomain

# Root password
rootpw --iscrypted $6$3Y0z0FD29vhUy/Ed$PRmmeqp284stUb5548cvv9V.1JTgtwSsx4wSi5wicLri1tBIgw15wyhXdLCnoB7tv/7a38OpN2ybou/VNeTHP/
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
bootloader --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --size=2048
part pv.198 --fstype="lvmpv" --ondisk=sda --size=100351
volgroup centos --pesize=4096 pv.198
logvol /home  --fstype="xfs" --size=4092 --name=home --vgname=centos
logvol /  --fstype="xfs" --size=61440 --name=root --vgname=centos
logvol /var  --fstype="xfs" --size=30720 --name=var --vgname=centos
logvol swap  --fstype="swap" --size=4096 --name=swap --vgname=centos

%packages
@^minimal
@core

%end

%addon com_redhat_kdump --disable --reserve-mb='128M'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end


首先,vim打开该文件后,即进入正常模式,ctrl +g 可看到文档的基本信息

以上表示,我的光标停留在了49行的第一个字母,vim所打开的文件名是 anaconda-ks.cfg,总共53行,光标在该文本文档的92%处停留。该文件没有被修改过,如果修改了,但还没保存退出,ctrl+g 会这样显示(加了个[Modified])。



(一)正常模式---->可视模式(视图模式) 

切换方式为v或者V或者ctrl+v,这里要说一下了,v,V,ctrl+v 是可视模式的三种状态,v是可视模式的基本模式(可以取得行或者块模式的效果,使用上更为灵活),V是可视模式的行可视模式(以行为单位),ctrl+v是可视模式的块可视模式(以块为单位,块也就是区域需要自己定义),进入可视模式后,复制,粘贴,删除,光标定位仍可使用,具体说,就是y,p,d,h,j,k,l都可使用,因此,配合这些按键就可以达到很多我们想要的结果,不仅有这些按键,我们还有快捷键可以使用!!!!!  也就是ve ,vw,vb。

(1)v

当然,我们如果脱离了其它模式只讲一个单一模式,无疑是耍流氓。比如,需要复制第一行的version,不包括前面的#号,将该单词粘贴到下一行,我们的按键顺序应该是ggwveyo esc p。这里,我们使用了ve组合的快捷键。

ve表示光标处到单词末尾,连续ew,就是连续选取,以单词为单位,注意,不包括空格。vw和ve是一样的,只是包括了空格,也就是认为空格也是一个单位。

vb是向后选择,多个b就是多次向后选取。

vc和vs是删除光标所在字母并进入编辑模式。如果所在行是空行,那么,将删除空行后在下一行行首插入编辑,这里需要提一下cc,这个组合在正常模式下,表示删除光标所在行并进入编辑模式,简单说就是行重写,

等于dd+大o

(2)大v

仍以示例文件为例,如果想要复制文件内的这么两行,怎么做?

network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
       network  --hostname=localhost.localdomain

思路首先是如何快速的定位到这么两行,然后选取这两行后复制,在粘贴到合适的地方。

定位方法为:/ 后输入network,然后回车。此时,应该已经定位到这么两行了。

Vjyy这个组合命令即可复制这两行了。此时,光标移动到文件末尾,p 即可看到复制的这两行内容了。

大v的作用就是快递选定行的,仅此而已,注意一点,是按行为单位选取。此时,即使使用了hl来调整范围,依然是按行选定。

(3)Ctrl +v

这个没什么好说的,块选择,可以使用webhjkl这些按键快速选择。

 

小结:可视模式--->插入模式,请使用vc,vs,如果需要快速复制整个文本,那么,命令应该为:ggvG+end+yy,

ve,vw,vb按单词为单位选取(通常需要w,e,b配合,比如wve这样的组合,就是选取一个单词,wvee,选取两个单词,特殊符号算一个单词,),后续处理,自行思考。

那么,如果你认真阅读了以上内容,下面这个问题应该对你是轻而易举的。

问题:把该文件的第四行# Use CDROM installation media 修改为 # Don't use CDROM installation media  

答案我就不说了,请各位看官自行思考。




(二),正常模式---->替换模式

Ctrl+r 和u 是一对,u是撤销修改,按步撤销,Ctrl+r是按步恢复,比如,如果我在文件末尾添加1,2,3,4,5,一个数字占一行,此时文件没有保存,如果,按一次u,回退一个数字,Ctrl+r前进一个数字。注意一点,模式切换一次算一步,不管是什么模式互换。比如,第一步,在末尾按o,写下1,esc,这是第一步,再次o,写下数字2,esc,这算是第二步,依次类推。

正常模式到替换模式是使用键盘的r,替换模式细分为两种,一种是只替换一个字母(小写r),一种是连续替换(大写r)。

小写r用在文档编辑极少的极细微的改动需求时,大写r用在需要大量的修改文档内的某些字段,这里需要注意,替换模式屏蔽所有其他的功能按键哦(除了esc),也就是说,比如在可视模式下,你还可以使用hjkl等等功能按键,但此时,在替换模式下,你在键盘上按的是什么,就会输入什么,直到你按了esc退出替换模式到正常模式为止。因此,替换模式没有什么花里胡哨,方向键是你唯一的定位按键

三),正常模式---->末尾模式

该模式是输入:即可进入末尾模式,这里得命令大部分所针对的对象是vim编辑器内部,比如,vim的显示方式(显示高亮,显示行号等等)

nohl  不显示高亮

set number 显示行号 永久显示行号需要编辑文件 vim ~/.vimrc 在此文件内添加 set number

%s/原有内容/要替换的内容/g  全文替换。例如:删除文本文档内的所有注释符号#,应该是首先进入末尾模式,输入: , 然后输入以下命令:%s/#/ /g,全文注释命令如下:%s/^/#/g

window下的文件放到Linux下的空格格式转换 :set ff=unix

(四),批量注释和批量取消注释的若干方法

(1)

Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的I进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下ESC,Vim会自动将你选中的所有行首都加上注释,保存退出完成注释。

这里需要注意,一定要按两次esc才会生效。取消注释:Ctrl+v块选择模式,选中所有的#,然后按r+空格即可取消所有注释。

(2)

进入末尾模式,全文注释,命令如下:%s/^/#/g,取消所有注释:%s/^#/ /g
 

(3)

进入连续替换模式,大写r,逐个修改。虽然可行,但稍显愚蠢。

(4)

awk命令,sed命令,grep命令联合或者单独快速添加注释或者取消注释,本文探讨vim,因此,不予讨论。

(五),

批量排版

进入末尾模式,:ce居中   :le靠左   :ri靠右  指定行数排版,比如,指定1到10行居中,:1,10ce,这里需要注意,只有连续行不能跳行。

使用tab迅速缩进,同居中,只是ce,le,ri这些改成了 > <    ,  > 代表右缩进,  < 代表左缩进,比如,11到20行右缩进, :11,20>    只输入:>   表示光标所在行右缩进

全文排版:gg  v G end =   (这的end是相对键盘里的那个home的键)

 

总结:

需要善于利用cc这个组合键快速删除后并切换到编辑模式,这会提高很多效率,在vim中,需要着重的牢记 w,e,b (W,E,B)这三对以单词和空格为单位的定位按键。为了加深理解,请理解一下命令:

dw 删除一个单词,特殊符号算一个单词,空格隔开的连续的字母以及数字算一个单词,直到下一个单词的词首。(单词定义)

dW 删除一个单词,特殊符号不单独算一个单词,只以空格算一个单词,直到下一个单词的词首。(单词定义不同)

de  删除到本单词末尾,特殊符号算一个单词,空格隔开的连续的字母以及数字算一个单词,直到下一个单词的词尾。(单词定义)

de  删除到本单词末尾,特殊符号不单独算一个单词,空格隔开的连续的字母以及数字算一个单词,直到下一个单词的词尾。(单词定义不同)

dw和de删除操作后光标定位不同,db和dwde基本类似,dE和dB是常用的哦。

大c删除光标所在行从光标处到行尾,并进入编辑模式,这个很实用的!!!!!!!!!!!!!!!!!!!!!~~~~~~~

 

 

批量排版和可视模式,末尾模式很重要,这几个模式是高低手的差距所在。

 

 

 

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐