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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VIM替换命令大全

發布時間:2025/3/21 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VIM替换命令大全 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

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

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

vim中一些高級替換技巧

1.替換變量

在正規表達式中使用 \( 和 \) 符號括起正規表達式,即可在后面使用\1、\2等變量來訪問 \( 和 \) 中的內容。
example:
·將 data1 data2 修改為 data2 data1
-----------------------------------
:s/\(\w\+\)\s\+\(\w\+\)/\2\t\1
-----------------------------------
·將 Doe, John 修改為 John Doe
-----------------------------------
:%s/\(\w\+\), \(\w\+\)/\2 \1/??
-----------------------------------

2.利用函數式替換

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

3.匹配的開始與結束

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

4. 高級遞增替換

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

總結

以上是生活随笔為你收集整理的VIM替换命令大全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。