作者javafang (newJ)
看板Editor
标题[vim ] 保留前後字元,修改中间的字元
时间Tue Feb 21 21:59:05 2017
想在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://webptt.com/cn.aspx?n=bbs/Editor/M.1487685547.A.2CC.html
1F:推 akria: %s/\<\@<!.\>\@!/_/gc 02/21 23:44
2F:推 fjm31714: 搞不太懂为什麽 ^\@<!.$\@! 这样後面 match 不到 02/22 00:40
3F:推 akria: 因为 $ 要代表行尾,必须满足其中一个条件: 02/22 01:56
4F:→ akria: 1. 在 pattern 最後 02/22 01:56
5F:→ akria: 2. 在 \| 之前 02/22 01:57
6F:→ akria: 3. 在 \) 之前 02/22 01:57
7F:→ akria: 4. 在 \n 之前 02/22 01:57
8F:→ akria: 否则,会被解释成 $ 符号。 02/22 01:58
9F:→ akria: 因此,你可以将 $ 换成 \_$ 或者是 \n 就可以了 02/22 01:58
10F:→ fjm31714: 感谢解释 02/23 01:22
11F:→ javafang: 哇,太神奇了,感谢akria大大的神助,我研究一下怎麽解 02/25 11:37
12F:→ javafang: 释这段语法~ 02/25 11:37
13F:推 curist: 因为实在看不懂akria大的解法 另外google了两个解法 03/08 15:06
14F:→ curist: :%s/^.\zs.*\ze.$/\=repeat('_',len(submatch(0)))/g 03/08 15:06
15F:→ curist: :%g/^.\zs.*\ze.$/norm gnr_ 03/08 15:07
16F:推 akria: 第二个解法,碰到一行里面只有两个字母时候,会出错。 03/11 23:25
17F:→ akria: 改成 :%g/^.\zs.\+\ze.$/norm gnr_ 比较好 03/11 23:26
18F:→ akria: 我的作法是用到 \@<! 零宽度反向否匹配 03/11 23:29
19F:→ akria: 以及 \@! 零宽度否匹配 03/11 23:29
20F:→ akria: 结构很简单,搜寻 .,但是前面不能有 \< ,後面不能有 \> 03/11 23:31
21F:推 curist: 学到了 感谢 03/14 10:44
22F:→ javafang: 感谢指导~~ 06/04 13:36
※ 编辑: javafang (203.213.93.179), 06/05/2017 07:14:28
※ 编辑: javafang (203.213.93.179), 06/05/2017 10:21:33