大家进来说一个自己觉得很棒的vim技巧

Vim、Emacs配置和使用
niejieqiang
帖子: 151
注册时间: 2009-05-29 22:05

Re: 大家进来说一个自己觉得很棒的vim技巧

#46

帖子 niejieqiang » 2011-11-17 14:40

lilydjwg 写了:
niejieqiang 写了::perld s///g

不需要再重新学习vim正则中那蛋疼的语法.
vim regex 中有不少功能 perl regex 做不到的。
感觉完全够用了,复杂点都不用正则处理的。
比如要处理成这样的(只用正则),将:
1123456789.7777776
变成
1,123,356,789.777,777,6
perld都可以实现了
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 大家进来说一个自己觉得很棒的vim技巧

#47

帖子 lilydjwg » 2011-11-17 14:52

niejieqiang 写了:
lilydjwg 写了:
niejieqiang 写了::perld s///g

不需要再重新学习vim正则中那蛋疼的语法.
vim regex 中有不少功能 perl regex 做不到的。
感觉完全够用了,复杂点都不用正则处理的。
比如要处理成这样的(只用正则),将:
1123456789.7777776
变成
1,123,356,789.777,777,6
perld都可以实现了
Perl 的负向零宽断言要求是定长的,Perl 不支持 \zs 和 \ze,Perl 不能按行/列/光标位置匹配,Perl 不支持 \=。
niejieqiang
帖子: 151
注册时间: 2009-05-29 22:05

Re: 大家进来说一个自己觉得很棒的vim技巧

#48

帖子 niejieqiang » 2011-11-17 15:15

:em20
vim正则不懂,看了下help,请问\ze 和\zs 是向前断言和向后断言吗?
perld可以。。。

\= 就是懒惰匹配??? :em20
也是可以的。

行列光标位置匹配能否举个例子说明下?没折腾过
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 大家进来说一个自己觉得很棒的vim技巧

#49

帖子 lilydjwg » 2011-11-17 17:31

niejieqiang 写了::em20
vim正则不懂,看了下help,请问\ze 和\zs 是向前断言和向后断言吗?
perld可以。。。

\= 就是懒惰匹配??? :em20
也是可以的。

行列光标位置匹配能否举个例子说明下?没折腾过
\zs 和 \ze 是标记实际匹配的起止部分,可部分代替断言,比如把所有 abc 单词后加个逗号: %s/\<abc\>\zs/,/g

缓冲区位置匹配见 :h \%l 等,这个一般都是插件里在用。

\= 在替换部分是指定从表达式求值,如 \=submatch(0) + 1 可以把匹配到的整数值加一。
niejieqiang
帖子: 151
注册时间: 2009-05-29 22:05

Re: 大家进来说一个自己觉得很棒的vim技巧

#50

帖子 niejieqiang » 2011-11-18 10:26

lilydjwg 写了:
niejieqiang 写了::em20
vim正则不懂,看了下help,请问\ze 和\zs 是向前断言和向后断言吗?
perld可以。。。

\= 就是懒惰匹配??? :em20
也是可以的。

行列光标位置匹配能否举个例子说明下?没折腾过
\zs 和 \ze 是标记实际匹配的起止部分,可部分代替断言,比如把所有 abc 单词后加个逗号: %s/\<abc\>\zs/,/g

缓冲区位置匹配见 :h \%l 等,这个一般都是插件里在用。

\= 在替换部分是指定从表达式求值,如 \=submatch(0) + 1 可以把匹配到的整数值加一。
数字加一不是正则的东西了吧。。。。
:perld s/(\d+)/$1+1/ge
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 大家进来说一个自己觉得很棒的vim技巧

#51

帖子 lilydjwg » 2011-11-18 12:31

niejieqiang 写了:
lilydjwg 写了:
\zs 和 \ze 是标记实际匹配的起止部分,可部分代替断言,比如把所有 abc 单词后加个逗号: %s/\<abc\>\zs/,/g

缓冲区位置匹配见 :h \%l 等,这个一般都是插件里在用。

\= 在替换部分是指定从表达式求值,如 \=submatch(0) + 1 可以把匹配到的整数值加一。
数字加一不是正则的东西了吧。。。。
:perld s/(\d+)/$1+1/ge
反正 vim 就是可以这么弄。不光做算术,干别的事也行的。
头像
Fermat618
帖子: 728
注册时间: 2008-12-28 16:01

Re: 大家进来说一个自己觉得很棒的vim技巧

#52

帖子 Fermat618 » 2011-11-22 22:37

niejieqiang 写了:
lilydjwg 写了:
niejieqiang 写了::em20
vim正则不懂,看了下help,请问\ze 和\zs 是向前断言和向后断言吗?
perld可以。。。

\= 就是懒惰匹配??? :em20
也是可以的。

行列光标位置匹配能否举个例子说明下?没折腾过
\zs 和 \ze 是标记实际匹配的起止部分,可部分代替断言,比如把所有 abc 单词后加个逗号: %s/\<abc\>\zs/,/g

缓冲区位置匹配见 :h \%l 等,这个一般都是插件里在用。

\= 在替换部分是指定从表达式求值,如 \=submatch(0) + 1 可以把匹配到的整数值加一。
数字加一不是正则的东西了吧。。。。
:perld s/(\d+)/$1+1/ge
让你看看怎么用sed实现数字加一的任务。 :em03

代码: 全选

#!/usr/bin/sed -f

/[^0-9]/ d

# replace all leading 9s by _ (any other character except digits, could
# be used)
:d
s/9\(_*\)$/_\1/
td

# incr last digit only.  The first line adds a most-significant
# digit of 1 if we have to add a digit.
#
# The `tn' commands are not necessary, but make the thing
# faster

s/^\(_*\)$/1\1/; tn
s/8\(_*\)$/9\1/; tn
s/7\(_*\)$/8\1/; tn
s/6\(_*\)$/7\1/; tn
s/5\(_*\)$/6\1/; tn
s/4\(_*\)$/5\1/; tn
s/3\(_*\)$/4\1/; tn
s/2\(_*\)$/3\1/; tn
s/1\(_*\)$/2\1/; tn
s/0\(_*\)$/1\1/; tn

:n
y/_/0/
爱因斯坦会弹钢琴
爱因斯坦会拉小提琴
爱因斯坦会骑自行车
头像
rykka
帖子: 59
注册时间: 2011-06-24 9:14

Re: 大家进来说一个自己觉得很棒的vim技巧

#53

帖子 rykka » 2011-11-23 0:31

奇技淫巧么 :em01

代码: 全选

!!
将当前行删除并插入external cmd 的结果

代码: 全选

==
自动indent当前行及折叠。

代码: 全选

@"
@*
运行yank/clipboard的内容。

代码: 全选

d/this
一直删除到'this'为止(如果存在)

代码: 全选

map <leader>nu :set nu! nu?<CR>
map <leader>li :set li! li?<CR>
切换行号显示
切换listchar字符显示

代码: 全选

    nnoremap <c-scrollwheeldown> >>
    nnoremap <c-scrollwheelup> <<
    vnoremap <c-scrollwheeldown> >gv
    vnoremap <c-scrollwheelup> <gv
ctrl+滚轮切换选中行indent
回复