Vim结合贪婪匹配将左右两边表达式交换位置

1. 将==、>=、<=、!=这四个比较符号量变的单词交换位置

注意:该命令仅能交换比较符号左右两边都是单个变量的情况,如有函数或者数组之类的情况,请输入n不交换。

vim底行命令:

:%s#\(\w\+\)\([!><=]=\)\(\w\+\)#\3\2\1#gc

命令解释:

1. %           表示整个文件,等价于  1,$
2. s           替换命令
3. #           分隔符,也可以用反斜杠或者冒号,推荐用井号,不然很多场景正则表达式各种转义跟分隔符会看疯你
4. \(\w\+\)    匹配一整个单词,正则表达式中可以用\(和\)将一个整体的表达式括起来,而\w\+表示整个单词
5. [!><=]=     不再解释了
6. \3\2\1      前面两个#之间有三个\(和\)括起来的表达式,左到右一次为1、2、3,现在3跟1交换位置,表示前面的表达式3和表达式1交换位置
7. g           全局替换
8. c           替换前询问,输入y表示同意替换,n表示不替换。

2. 将 && 符号左右两边表达式交换位置(贪婪匹配)

if条件语句中((a表达式) && (b表达式)),将a表达式和b表达式交换位置,
要替换的文本示例:

    } else if ((gpioScanRow == 48) && (gpioScanCol = 44)) {
        keyBoard->up = 1;
        printf("keyBoard->up pressed!\r\n");
    } else if ((gpioScanRow == 49) && (gpioScanCol = 44)) {
        keyBoard->right = 1;
        printf("keyBoard->right pressed!\r\n");
    } else if ((gpioScanRow == 48) && (gpioScanCol = 42)) {
        keyBoard->f1 = 1;
        printf("keyBoard->f1 pressed!\r\n");
    } else if ((gpioScanRow == 49) && (gpioScanCol = 42)) {

命令如下:

%s#\((gpioScan.\{-1,})\)\( && \)\((gpioScan.\{-1,})\)#\3\2\1#gc

以井号为分隔符,这样分开写很好理解

%s                                 全局替换

#                                  分隔符

\((gpioScan.\{-1,})\)              表达式1贪婪匹配表达式【(gpioScanxxxx)】

\( && \)                           不变位置的符号【 && 】,注意&&两边分别有个空格,符号共4个字符,也就是说要交换【空格&&空格】左右两边的表达式

\((gpioScan.\{-1,})\)              表达式2贪婪匹配表达式【(gpioScanxxxx)#                                  分隔符

\3\2\1                             前面的三个【\(...\)】括起来的表达式,左到右一次为表达式123递增,此处替换为321,即表达式1和表达式3交换位置

#                                  分隔符

gc                                 全局替换,并且每次输入Y确认替换,输入N不替换
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值