Vim 关于高级映射的更详细建议

Vim 关于高级映射的更详细建议,vim,map,Vim,Map,我发现命令在两个单词列表中有很大的不同,我发现最好的也是唯一的解决方案是这个命令: g/^/kl |if search('^'.escape(getline('.'),'\.*[]^$/').'$','bW') |'ld 例如,我想在我的_vimrc文件中创建一个映射,每当我点击F2时,它就会执行这一行,但我一直无法使它工作。 如果有人能一个字一个字地解释这句台词的实际作用,我想这会让世界变得完全不同。我看过十几篇关于vim映射的文章,没有一篇解释像/or^或\.*{}^$/'这样的东西在这样

我发现命令在两个单词列表中有很大的不同,我发现最好的也是唯一的解决方案是这个命令:

g/^/kl |if search('^'.escape(getline('.'),'\.*[]^$/').'$','bW') |'ld
例如,我想在我的_vimrc文件中创建一个映射,每当我点击F2时,它就会执行这一行,但我一直无法使它工作。 如果有人能一个字一个字地解释这句台词的实际作用,我想这会让世界变得完全不同。我看过十几篇关于vim映射的文章,没有一篇解释像/or^或\.*{}^$/'这样的东西在这样的上下文中做了什么

映射中何时需要:?我已经看到了一些有和大多数没有的例子

什么时候需要


提前谢谢这听起来像是Awk的工作

:%!awk '!a[$0]{a[$0]=1;print}'
然而,你问了两个问题:

如果搜索“^”.escapegetline.”、“\.*[]^$/.”、“$”、“bW”|会做什么? 我怎样才能映射到这个? 映射 让我们从如何映射到这个开始:

:nnoremap <f2> :g/^/kl<bar>if search('^'.escape(getline('.'),'\.*[]^$/').'$','bW')<bar>'ld<cr>
我们消除了不必要的痕迹,简化了逃逸过程。我还添加了endif来显示if语句的结尾,这可以选择性地省略,因为它将被假定

:g/{pat}/{cmd}:global命令在匹配{pat}的任何行上运行{cmd} :g/^/是在每一行上运行命令的常用习惯用法,因为所有LIN都有一个开头^。 如果{expr}{cmds}| endif。如果表达式{expr}的计算结果为true,则执行{cmds} 搜索{pat},{flags}在缓冲区中搜索{pat}。{flag}更改搜索行为 搜索返回匹配的行号,如果未找到匹配,则返回0 b搜索标志表示向后搜索 W标志表示搜索时不环绕缓冲区 n不要移动光标 转义{str},{chars}转义{chars}带\ \V模式使用非常不神奇的方法,这意味着所有正则表达式元字符都需要转义 \^和\$因\V选项而对行的开始和结束进行转义 :delete或简称:d删除当前行 我建议您在回答这个问题时使用awk解决方案

:nnoremap <f2> :%!awk '!a[$0]{a[$0]=1;print}'<cr>

很好地使用了\V。例如,如果您想要一个不依赖awk的ON解决方案,那么即使vim在一个残废的操作系统上运行,您也希望它能够工作,那么修改我在这里给出的函数将很容易:谢谢您的回答。我在和下添加了两个到$MYVIMRC的映射,第二个对我不起作用。上面说没有先前的命令。我对编程并不陌生,但我对vim和linux还不熟悉,所以我仍然对许多操作符感到困惑,而且我还没有找到任何地方列出我想知道的内容,这导致了我在上面的困惑。例如,我知道g对整个文件进行了寻址,^指向行中的第一个非空字符,但我不知道/是做什么的,也不确定“是用作单引号还是运算符。你能帮我一下吗?谢谢,这帮了我大忙。
:nnoremap <f2> :%!awk '!a[$0]{a[$0]=1;print}'<cr>
:h :range!
:h :g
:h :d
:h :l
:h :if
:h search(
:h escape(
:h /\V