[vim ] 保留前後字元,修改中間的字元

看板Editor (編輯器(vim/emacs))作者 (newJ)時間7年前 (2017/02/21 21:59), 7年前編輯推噓6(6016)
留言22則, 4人參與, 最新討論串1/1
想在vim做一個功能 若文件內文是 good help student school 希望可以的結果是 g__d h__p s_____t s____l 目前只有推到下面這樣就卡住了 :%s/\(^.\)\|./\1_/gc 不知道各位大大有什麼提示嗎? 先感謝了 2017.06.05補充 若使用 %s/\a\(\a\)\@=\&\(\a\)\@<=\a/_/gc 也可以處理行裡面有多個單字的情況 take place school 會變成 t__e p___e s____l 謝謝akria,curist,fjm31714的分享 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 14.203.189.15 ※ 文章網址: https://www.ptt.cc/bbs/Editor/M.1487685547.A.2CC.html

02/21 23:44, , 1F
%s/\<\@<!.\>\@!/_/gc
02/21 23:44, 1F

02/22 00:40, , 2F
搞不太懂為什麼 ^\@<!.$\@! 這樣後面 match 不到
02/22 00:40, 2F

02/22 01:56, , 3F
因為 $ 要代表行尾,必須滿足其中一個條件:
02/22 01:56, 3F

02/22 01:56, , 4F
1. 在 pattern 最後
02/22 01:56, 4F

02/22 01:57, , 5F
2. 在 \| 之前
02/22 01:57, 5F

02/22 01:57, , 6F
3. 在 \) 之前
02/22 01:57, 6F

02/22 01:57, , 7F
4. 在 \n 之前
02/22 01:57, 7F

02/22 01:58, , 8F
否則,會被解釋成 $ 符號。
02/22 01:58, 8F

02/22 01:58, , 9F
因此,你可以將 $ 換成 \_$ 或者是 \n 就可以了
02/22 01:58, 9F

02/23 01:22, , 10F
感謝解釋
02/23 01:22, 10F

02/25 11:37, , 11F
哇,太神奇了,感謝akria大大的神助,我研究一下怎麼解
02/25 11:37, 11F

02/25 11:37, , 12F
釋這段語法~
02/25 11:37, 12F

03/08 15:06, , 13F
因為實在看不懂akria大的解法 另外google了兩個解法
03/08 15:06, 13F

03/08 15:06, , 14F
:%s/^.\zs.*\ze.$/\=repeat('_',len(submatch(0)))/g
03/08 15:06, 14F

03/08 15:07, , 15F
:%g/^.\zs.*\ze.$/norm gnr_
03/08 15:07, 15F

03/11 23:25, , 16F
第二個解法,碰到一行裡面只有兩個字母時候,會出錯。
03/11 23:25, 16F

03/11 23:26, , 17F
改成 :%g/^.\zs.\+\ze.$/norm gnr_ 比較好
03/11 23:26, 17F

03/11 23:29, , 18F
我的作法是用到 \@<! 零寬度反向否匹配
03/11 23:29, 18F

03/11 23:29, , 19F
以及 \@! 零寬度否匹配
03/11 23:29, 19F

03/11 23:31, , 20F
結構很簡單,搜尋 .,但是前面不能有 \< ,後面不能有 \>
03/11 23:31, 20F

03/14 10:44, , 21F
學到了 感謝
03/14 10:44, 21F

06/04 13:36, , 22F
感謝指導~~
06/04 13:36, 22F
※ 編輯: javafang (203.213.93.179), 06/05/2017 07:14:28 ※ 編輯: javafang (203.213.93.179), 06/05/2017 10:21:33
文章代碼(AID): #1Oh4UhBC (Editor)
文章代碼(AID): #1Oh4UhBC (Editor)