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不替换