vim 删除重复部分的行 vim 技巧

您所在的位置:网站首页 如何删除vim的所有内容记录 vim 删除重复部分的行 vim 技巧

vim 删除重复部分的行 vim 技巧

2024-07-14 13:15:03| 来源: 网络整理| 查看: 265

g/\%(^\1\>.*$\n\)\@ : 匹配尖括号中的内容

" 零宽度匹配 :h /\@=/\@= : 匹配标签中的内容,而忽略本身/\@= : 和上例相比,差别在于允许跨行

" 多行查找 \_ 的意思是包括换行符/ : 匹配结尾的所有内容/fred\_s*joe/i : 匹配fred开始到joe,之间没有任何字符或者是有空白字符/bugs\(\_.\)*bunny : 匹配所有bugs到bunny的字符串:h \_ : help

" 查找函数声明,nmap为normal模式下的键盘映射:nmap gx yiw/^\(sub\function\)\s\+" : yiw表示将当前所在单词拷贝到寄存器"中,表示|,即sub或者function

" 查找多个文件:bufdo /searchstr/ : 在多个文件缓冲区里执行查找

" 更好的多文件查找定位方法:bufdo %s/searchstr/&/gic : 在多个文件缓冲区里查找,按下n停止

" 怎样不使用 / 来查找网址?http://www.vim.org/ : 向上查找

" 查找指定字符以外的字符串/\c\v([^aeiou]&\a){4} :查找4个辅音字母,\c表示忽略大小写,\v表示后面所有ascii字符,除了0-9,a-z,A-Z以及_,均有特殊含义,就是所谓非常magic, 而\V表示后面的内容中只有反斜杠\含有特殊含义,就是所谓的非常不magic,(和)中间的内容,表示首先不能是aeiou,但是必须是\a(字母)。

----------------------------------------" 替换:%s/fred/joe/igc : 普通替换命令:%s/\r//g : 删除 DOS 的换行符 ^M

" 你的文本文件是否乱七八糟的排成一行?使用如下命令:%s/\r/\r/g : 转换 DOS 回车符 ^M 为真正的回车符:%s= *$== : 删除行尾空白:%s= \+$== : 同上:%s#\s*\r\?$## : 删除尾部空白和dos换行符:%s#\s*\r*$## : 同上

" 删除空行:%s/^\n\{3}// : 删除连续3个空行:%s/^\n\+/\r/ : 压缩空行,多个替换为一个%s#]\+>##g : 删除html的tag部分

" 如果你只想学一招,那么就是这个了:'a,'bg/fred/s/dick/joe/igc : 非常有用# ''a,''b指定一个范围:mark a ~ mark b# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配# 看后面,g//是一个全局显示命令# s/dick/joe/igc则对于这些满足条件的行进行替换

" 复制最后一个字段:%s= [^ ]\+$=&&= : 复制最后一个字段:%s= \f\+$=&&= : 一样:%s= \S\+$=&& : 一样!

" 记忆(反向引用):s/\(.*\):\(.*\)/\2 : \1/ : 将两个字段颠倒:%s/^\(.*\)\n\1$/\1/ : 删除重复行

" 非贪婪匹配 \{-}:%s/^.\{-}pdf/new.pdf/ : 将第一个pdf的名字换为new.pdf

" 使用可选原子 \?:%s#\#\L&#gc : 匹配tbl前面没有字母,或者z和y中的某一个字母,然后将所有的字母变为小写

" 跨越尽量多的行:%s/// : 删除多行注释:help /\{-} : 查看非贪婪匹配的更多帮助

" 使用寄存器替换:s/fred/a/g : 将fred替换为寄存器a里的内容,为按下Ctrl与r,然后输入a后,寄存器a的内容会出现在命令行:s/fred/asome_texts/g:s/fred/\=@a/g : 与第一条的作用相同,但是更优雅一些,因为不会在命令行显示寄存器的内容

" 在一行里写多种命令:%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d | %s/gif/jpg/ :将所有带有.gif的行,前后均加入一个空行;将不带有.gif字样的行全部删除;将所有行中的gif换成jpg;注意三条语句,一旦某一条失败,则不 执行下面的语句:%s/a/but/gie|:update|:next : 首先,将当前文件中的所有a变为but;然后保存文件;最后进入下一个文件缓存区。如果有多个文件需要如此处理,可以考虑使用 @:来重复,@:的意义是:执行上一次的命令行命令n次。

" 或运算:%s/suck\|buck/loopy/gc : 替换suck或者buck为loopy(这里|不是管道)

" 调用vim函数:s/__date__/\=strftime("%c")/ : 将__date__替换成当前日期,使用strftime函数。注意\=表示后面是表达式,结果可能是2008-1-3 17:59:46

" 处理字段,替换所有在第三个字段中的str1为str2:%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:

" 交换第一列跟第四列:%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:

" 过滤form中的内容放在寄存器里:redir @*|sil exec 'g##p'|redir END : redir是将执行的结果重定向到后面的*寄存器中,sil是silent:nmap ,z :redir @*sil exec'g@@p'redirEND : 普通模式下,敲入,z,命令行执行redir @*|sil exec'g@@p'|redir END

" 一位以上的数字减3(带进位,这个命令挺有趣):%s/\d\+/\=(submatch(0)-3)/

" 包含loc或者functions的行中的数字加6:g/loc\|function/s/\d/\=submatch(0)+6/

" 比上面更好的方法:%s#txtdev\zs\d#\=submatch(0)+1#g : \zs表示是s要匹配的的内容的开头:h /\zs 查看帮助

" 前缀为gg的数字加6:%s/\(gg\)\@> errors.txt : 将查找内容放入一个文件 (文件必须存在)

" 复制每一行,然后在复制出来的每一行左侧加上一个 print '复制出来的内容':g/./yank|put|-1s/'/"/g|s/.*/Print '&'/

" 用文件中的内容替换字符串,-d 表示删除上面的一行:g/^MARK$/r tmp.ex | -d

" 优雅地显示 :g//z#.5 : 带有上下文一并显示:g//z#.5|echo "==========" : 优雅地显示

" 将g//和普通模式下的命令结合起来:g/|/norm 2f|r* : 将第二个|替换为*号

" 将前面g命令的输出,发送到新窗口中:nmap :redir @a:g//:redir END:new:put! a

----------------------------------------" 全局命令和替换命令联姻 (强大的编辑能力):'a,'bg/fred/s/joe/susan/gic : 可以使用反向引用来匹配:g/fred/,/joe/s/fred/joe/gic : 非行模式

----------------------------------------" 先找fred,然后找joe:/fred/;/joe/-2,/sid/+3s/sally/alley/gIC : 最后这一个C,手册中都没有,估计是c

----------------------------------------" 为每一行生成一个文件,文件名从1.txt开始,依次为1.txt,2.txt,3,txt等等:g/^/exe ".w ".line(".").".txt"

----------------------------------------" 绝对精华

----------------------------------------* # g* g# : 查找当前光标下的单词(单个单词) () (向前/向后)% : 匹配括号 {}[](). : 重复上次操作@: : 重复上次的命令matchit.vim : 适%能匹配 : 在前后加上。

----------------------------------------" 浏览:Exp(lore) : 浏览文件:Sex(plore) : 分割窗口浏览文件:ls : 显示缓冲区:cd .. : 设置当前目录位置:args : 查看当前打开的所有文件:lcd %:p:h : 改变路径到当前编辑的文件:autocmd BufEnter * lcd %:p:h : 放入.vimrc自动完成上面的命令

----------------------------------------" 缓冲区浏览(一直排名前10的vim脚本)" 需要 bufexplorer.vim http://www.vim.org/script.php?script_id=42\be : 缓冲浏览器中查看缓冲列表\bs : 同上,但是分割窗口

----------------------------------------" 转换大小写guu : 将整行的字母转换成小写gUU : 将整行的字母转换成大写Vu : 转换选中的行(小写)VU : 转换选中的行(大写)g~~ : 反向转换vEU : 转换词大写,v表示进入可视模式,E表示覆盖到词的末尾,U表示大写。vE~ : 反向转换词ggguG : 将当前编辑文件内容全部转换成小写

" 可视模式下选择所有的字母及数字 (放入 .vimrc文件中)vmap ,c :s/\/\u\1\L\2/g

" 大写所有句子的第一个字母:%s/[.!?]\_s\+\a/\U&\E/g

----------------------------------------gf : 打开当前光标下或后的文件:nnoremap gF :view : 打开当前光标下或光标后的文件,如果不存在则创建ga : 显示当前光标下单个字的ascii码,十进制,十六进制……ggVGg? : 将整个文件用rot13编码……(谁看得懂啊~~hoho)ggg?G : 同上 (针对大文件):8 | normal VGg? : 将第八行用rot13编码:normal 10GVGg? : 同上, : 增加,减少当前光标下的数字,window用户缺省是将C-A映射成选中全文,所以需要重定义 CNTRL-A=5*5 : 插入25 (小型计算器)

----------------------------------------" 几个彩蛋,有意思:h 42 : also http://www.google.com/search?q=42:h holy-grail:h!

----------------------------------------" 标记 & 移动'. : 跳回最后编辑的行 (超有用)`. : 同上,但是定位编辑点g; : 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)g, : 这个是较新的位置 (同上):changes : 打出改变列表:h changelist : 查看“改变表跳转”的帮助 : 依次沿着你的跳转记录向回跳 (从最近的一次开始) : 依次沿着你的跳转记录向前跳:ju(mps) : 列出跳转轨迹:help jump-motions:history : 列出历史记录:his c : 命令行历史:his s : 搜索历史q/ : 搜索命令历史的窗口q: : 命令行命令历史的窗口: : 历史窗口

----------------------------------------" 缩写 & 映射:map :'a,'bw! c:/aaa/x:map :r c:/aaa/x:map :.w! c:/aaa/xr:map :r c:/aaa/xr:ab php : 查看以php开头的缩写:map , : 列出所有的映射(以逗号开始的)

" 允许映射 F10 (win32)set wak=no : :h winaltkeys

" 映射中常使用的表示 : 回车 : Esc : 右斜杠 : 管道符号 : 退格键 : 不回显#显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588:nmap c :hi Normal guibg=#=expand("")map /price only\\|versus/ :in a map need to backslash the \

----------------------------------------" 简单的 PHP 调试将所有显示的变量放入寄存器aiab phpdb exit("Debug a ");

----------------------------------------" 使用寄存器来映射 (放入 .vimrc文件自动加载):let @m=":'a,'bs/":let @s=":%!sort -u"

----------------------------------------" 列出寄存器:reg : 显示当前所有的寄存器:reg a : 显示寄存器a中的内容"1p.... : 引用一个叫1的寄存器:let @y='yy@"' : pre-loading registers (put in .vimrc)qqq : 清空寄存器 "q"

----------------------------------------" 一些有用的决窍"ayy@a : 把当前行作为命令执行yy@" : 上面的匿名寄存器u@. : 只执行键入的命令

----------------------------------------" 从其它命令处获得输入(需要外部命令):r!ls.exe : 从ls 获得输入插入到当前位置!!date : 从date获得输入(删除当前行)

" 使用外部sort排序:%!sort -u : 用sort排序整个文件(结果覆盖整个文件):'a,'b!sort -u : 从mark a到mark b之间的内容进行排序!1} sort -u : 排序一个段落:g/^$/;,/^$/-1!sort : 将每个块排序(注意这个关键的;)

----------------------------------------" 多文件管理 (基本的):bn : 跳转到下一个buffer:bp : 跳转到前一个buffer:wn : 保存当前buffer并跳转到下一个buffer (超有用):wp : 保存当前buffer并跳转到前一个buffer:bd : 把当前文件从buffer移出 (超有用):bun : 卸载当前buffer (关闭这个窗口但是不移出):badd file.c : 添加file.c到buffer列表:b 3 : 前往第三个 buffer:b main : 前往含有main的buffer中 比如说 main.c:sav php.html : 把当前文件存为php.html并打开:sav! %> :将mark a到mark b之间的内容进行两次缩进

" 虚拟模式下缩进 (可重复):vnoremap < i{>a{" also>% and 是vim自动添加的gv : 重新选择前一个可视区域 (高级!)

----------------------------------------" 在文件中插入行号:g/^/exec "s/^/".strpart(line(".")." ", 0, 4):%s/^/\=strpart(line(".")." ", 0, 5):%s/^/\=line('.'). ' '

----------------------------------------#用VIM的方式来编号行:set number : 显示行号:map :set number! : Show linenumbers flip-flop:%s/^/\=strpart(line('.')." ",0,&ts)

#从任意行开始编号(需要perl):'a,'b!perl -pne 'BEGIN{$a=223} substr($_,2,0)=$a++'

#产生数字列表#Type in number on line say 223 in an empty fileqqmnYP`n^Aq : in recording q repeat with @q

" 递增已存在数字到文件末:.,$g/^\d/exe "normal! \"

" 高级递增,参见:http://vim.sourceforge.net/tip_view.php?tip_id=150

----------------------------------------" 高级递增 (真的很有用)" 把下面几句放到 _vimrclet g:I=0function! INC(increment)let g:I =g:I + a:incrementreturn g:Iendfunction

" 例如从mark a 到mark b 递增,从223开始,步长为5:let I=223:'a,'bs/^/\=INC(5)/" create a map for INCcab viminc :let I=223 \| 'a,'bs/$/\=INC(5)/

----------------------------------------" 生成从 23-64 的数字列表o23qqYpq40@q

----------------------------------------" 在当前插入模式下编辑/移动 (真得很有用) : 删除全部 : 删除最后一个单词 : 移动到行首/行尾 : 向前/后移动一个单词, : 滚动,只要在insert中保持put

----------------------------------------#加密(小心使用,不要忘了密码):X : vim会提示你输入密码:h :X

----------------------------------------" 模式行 (使文件只读等),必须在前/后 5行内// vim:noai:ts=2:sw=4:readonly:" vim:ft=html: : 使用 HTML 语法高亮:h modeline

----------------------------------------" 建立你自己的菜单项amenu Modeline.Insert\ a\ VIM\ modeline ggOvim:ff=unix ts=4 ss=4vim60:fdm=markergg

----------------------------------------" 一个保存当前光标下的狭义字到一个文件的函数function! SaveWord()normal yiwexe ':!echo '.@0.' >> word.txt'endfunctionmap ,p :call SaveWord()

----------------------------------------" 删除重复行的函数function! Del()if getline(".") == getline(line(".") - 1)norm ddendifendfunction

:g/^/ call Del() #使用该函数的一个例子

----------------------------------------" 双字节编码 (non alpha-numerics):digraphs : 显示编码表:h dig : 帮助ie' : 输入 éi233 : 输入 é (Unix)i233 : 输入 é (Win32)ga : 查看字符的hex值

#删除非 ascii 字符:%s/[128-255]//gi : where you have to type the Control-V:%s/[€-ÿ]//gi : Should see a black square & a dotted y:%s/[128-25501-31]//gi : All pesky non-asciis:exec "norm /[\x00-\x1f\x80-\xff]/" : same thing

# 将非ascii字符,拉到搜索条上yl/" :/[^a-zA-Z0-9_[:space:][:punct:]] : search for all non-ascii

----------------------------------------" 文件名自动完成 (例如 main_c.c):e main_ : tab 键完成gf : 打开光标处广义字命名的文件 (normal模式)main_ : 文件名自动完成(insert模式)

----------------------------------------" Vim复杂使用" 交换两个单词:%s/\/\=strpart("offon", 3 * ("off" == submatch(0)), 3)/g

" 交换两个单词:vnoremap `.``gvP``P

----------------------------------------" 把text文件转换成html文件(oh,ft):runtime! syntax/2html.vim : 转换 txt 成 html:h 2html

----------------------------------------" VIM 有一个内部自带的 grep 命令:grep some_keyword *.c : 得到一个包含some_keyword的c文件名列表:cn : 去下一个出现的位置

----------------------------------------" 强制无扩展名的文件的语法着色方式:set syntax=perl

" 取消语法着色 (很有用):set syntax off

" 改变色彩主题 (在~vim/vim??/colors中的任何文件):colorscheme blue

" 通过使用模式行强迫使用 HTML 语法高亮# vim:ft=html:

" 强制自动语法加亮(非标准的文件扩展)au BufRead,BufNewFile */Content.IE?/* setfiletype html

----------------------------------------:set noma (non modifiable) : 防止修改:set ro (Read Only) : 只读保护

----------------------------------------" 会话 (打开一堆文件)gvim file1.c file2.c lib/lib.h lib/lib2.h : 在"对话"中加载这些文件:mksession : 生成一个Session文件 (默认是Session.vim):qgvim -S Session.vim : 重新加载所有文件

----------------------------------------#标记(tags) (跳转到子程序/函数)taglist.vim : 很流行的插件:Tlist : 显示标记 (函数列表) : 跳转到光标处的函数

----------------------------------------" 将csv文件分栏,以便仅显示宽行的字符:let width = 20:let fill=' ' | while strlen(fill) < width | let fill=fill.fill | endwhile:%s/\([^;]*\);\=/\=strpart(submatch(1).fill, 0, width)/ge:%s/\s\+$//ge

" 高亮显示特定的csv列 (放入.vimrc文件)function! CSVH(x)execute 'match Keyword /^\([^,]*,\)\{'.a:x.'}\zs[^,]*/'execute 'normal ^'.a:x.'f,'endfunctioncommand! -nargs=1 Csv :call CSVH()

" call with:Csv 5 : 高亮显示第5列

----------------------------------------" 折叠:隐藏某些片断,使查看更容易zf} : 使用动作命令折叠一个段落v}zf : 使用可视模式折叠一个段落zf'a : 折叠到一个标记上zo : 打开折叠zc : 重新关闭折叠

----------------------------------------" 显示"不可见字符":set list:h listchars

----------------------------------------" 如何在不进入插入模式的情况下粘贴"普通模式的命令":norm qqy$jq

----------------------------------------" 处理文件名:h filename-modifiers : 帮助:w % : 写入当前文件:w %:r.cfm : 改变文件扩展名为 .cfm:!echo %:p : 显示完整路径和文件名:!echo %:p:h : 只显示完整路径:!echo %:t : 只显示文件名:reg % : 显示文件名% : 插入文件名 (插入模式)

"%p : 插入文件名 (普通模式)/% : 在文本中查找文件名

----------------------------------------" 删除,但不破坏 buffer 内容,"_为黑洞寄存器,相当于linux上的/dev/null"_d : 你一直想要的东西"_dw : 例如:删除一个单词

----------------------------------------" 送完整的路径名到剪贴板,用于邮件附件等:nnoremap :let @*=expand("%:p") :unix:nnoremap :let @*=substitute(expand("%:p"), "/", "\\", "g") :win32

----------------------------------------" 不用离开 Vim 就能修改文件名的简单 shell 脚本$ vim:r! ls *.c:%s/\(.*\).c/mv & \1.bla:w !sh:q!

----------------------------------------" 在一个文本里计算单词数g

----------------------------------------" 你自己设置高亮显示的例子:syn match DoubleSpace " ":hi def DoubleSpace guibg=#e0e0e0

----------------------------------------" 重新逐字产生前面一行:imap ] @@@hhkyWjl?@@@P/@@@3s : 此种复杂的映射,解释,会害人的:)首先,输入@@@三个然 后ESC回到普通模式,hh是往左移动两个字符,就是到了第一个@上,然后k是到上一行。y表示yank,拷贝,W是指拷贝到大单词的结束。j是往下一 行,就是回到原来一行,l表示往右移动一个字符,以便下面的?查找。?是向上查找,找的内容是@@@。回车执行后,P是指将寄存器中 的内容(即上一行的完全内容)拷贝到@@@之前,然后再用/查找@@@。3s表示删除3个字符(就是@@@),并切换到插入模式。:nmap ] i@@@hhkyWjl?@@@P/@@@3s

" 根据文件类型映射快捷键:autocmd bufenter *.tex map :!latex %:autocmd bufenter *.tex map :!xdvi -hush %



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭