日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

VIM替换命令大全

發(fā)布時(shí)間:2025/3/21 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VIM替换命令大全 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.使用命令將C語(yǔ)言中的enum替換為JAVA常量:

g/^\s*$/d
g/^/s//public static final int/

let i=1000
g/,/ s//\='='.i.';'/ |let i=i+1

2.使用命令將C語(yǔ)言中的#define宏替換為JAVA常量:

%s/^#define [A-Z, 0-9, _]*\zs\s\ze/=/
g/#define/s//public static final int/
g/$/s//;/

vim中一些高級(jí)替換技巧

1.替換變量

在正規(guī)表達(dá)式中使用 \( 和 \) 符號(hào)括起正規(guī)表達(dá)式,即可在后面使用\1、\2等變量來(lái)訪(fǎng)問(wèn) \( 和 \) 中的內(nèi)容。
example:
·將 data1 data2 修改為 data2 data1
-----------------------------------
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1
-----------------------------------
·將 Doe, John 修改為 John Doe
-----------------------------------
:%s/\(\w\+\), \(\w\+\)/\2 \1/??
-----------------------------------

2.利用函數(shù)式替換

用法:
---------------------------
:s/替換字符串/\=函數(shù)式
---------------------------
說(shuō)明:
·函數(shù)式可以有多個(gè),返回值可以用字符串連接符.連接起來(lái),如line(".")返回匹配行號(hào)(:help line()? ),submatch(n)可以引用\1、\2的內(nèi)容,其中submatch(0)引用匹配的整個(gè)內(nèi)容;
·函數(shù)式也可以是字符串常量,用雙引號(hào)引起來(lái)。函數(shù)式也可以是任意表達(dá)式,需要用小括號(hào)引起來(lái),如(3+2*6);
·函數(shù)式還可以是寄存器中的內(nèi)容,通過(guò)"@寄存器名"訪(fǎng)問(wèn),如@a(不需要加引號(hào),但是還是需要用.來(lái)連接);
example:
·要將下列8行的data0依次變成data0~7(前面的數(shù)字是行號(hào))
double data0;
double data0;
double data0;
double data0;
double data0;
double data0;
double data0;
double data0;
如果安裝有perl的話(huà),我以前一般都是借助perl來(lái)完成這件事情:
---------------------------------------------------------------------------
:r !perl -n -le "if(s/^(double\s+data)\d;/$1$k;/){ $k++; print $_; }" %:p---------------------------------------------------------------------------
其中%:p表示包含完整路徑的文件名
現(xiàn)在只用vim我們就可以完成這樣的事情:
首先將光標(biāo)移到125行(line(".")返回當(dāng)前匹配行的行號(hào),line("'a")返回mark a的行號(hào)):
---------------------------------------------------------------------------
ma
:%s/^\(double\s\+data\)\d\(;\)/\=submatch(1).(line(".")-line("'a")+1).submatch(2)/g
---------------------------------------------------------------------------
再或者
首先將光標(biāo)移到125行(line("'V7j
:%s/^\(double\s\+data\)\d\(;\)/\=submatch(1).(line(".")-line("'
---------------------------------------------------------------------------

3.匹配的開(kāi)始與結(jié)束

\zs和\ze可以用于替換操作中指明替換的開(kāi)始與結(jié)束,如上例中可以以更短的操作來(lái)實(shí)現(xiàn):
---------------------------------------------------------------------------
ma
:%s#^double\s\+data\zs\d\ze#\=(line(".")-line("'a")+1)#g
---------------------------------------------------------------------------
另外,還可以使用vim表達(dá)式來(lái)實(shí)現(xiàn)上述功能:
---------------------------------------------------------------------------
:let n=0 | g/^double\s\+data\zs\d/s//\=n/ | let n+=1
---------------------------------------------------------------------------
其中 ·|????? 用來(lái)分割不用的命令;
·g????? 在匹配后面模式的行中執(zhí)行指定的ex命令
·\zs??? 指明匹配由此開(kāi)始
·s//\=n 對(duì)匹配模式進(jìn)行替換,匹配模式為空,表示以上一次匹配成功的模式,
并且指明替換是一個(gè)表達(dá)式;

4. 高級(jí)遞增替換

把下面幾句放到 _vimrc
-------------------------------
let g:I=0
function! INC(increment)
let g:I =g:I + a:increment
return g:I
endfunction
------------------------------
·對(duì)于上述問(wèn)題,可以這樣解決:
-----------------------------------------------------
:let I=-1 | %s/^ double\s\+data\zs\d\ze/\=INC(1)/
-----------------------------------------------------
·還可以生成數(shù)字序列,如生成1~100間隔為5的數(shù)字序列:
--------------------------------------
:let I=0 | ‘a(chǎn),’b s/^/\=INC(5)/
--------------------------------------

總結(jié)

以上是生活随笔為你收集整理的VIM替换命令大全的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。