算法工程师的效率神器——vim篇

一只小狐狸带你解锁炼丹术&NLP秘籍

我相信,有很多小伙伴在看到这篇文章时就有了很多问号:

用vim?疯了吧?sublime不香吗?pycharm不香吗?jupyter notebook不香吗?我这可是最新版的windows 100操作系统诶,你要劝我回到Dos/*nix年代??

没错,小鹿要硬着头皮劝了╮( ̄▽ ̄"")╭

其实对于做app开发、web开发等其他IT从业者来说,用vim的意义确实更多是出于情怀了。但是对于算法工程师,尤其是NLPer来说,vim简直堪称效率神器呀(用熟之后)。

想象一下,用熟vim之后,搬过来一个GPU服务器,你就直接ssh上去啪代码了,也不用折腾什么本地端与server端的通信和代码同步问题了。不管是写代码、看代码还是刷log,都可以一条命令搞定!而且最重要的是,vim超级轻量级,只要你手速够快,秒开秒关不再是高端笔记本的专属,再也不用盯IDE启动时的进度条了。(怎么像是在给vim写软文??给点钱叭。。。

遥想小鹿第一次接触vim的时候,看着黝黑的界面上唯一一个闪烁的白色光标,内心OS也是

黑漆漆的什么鬼,太不符合我的审美了叭我要IDE我要鼠标

慢慢熟悉之后,发现

可爱预警:与CSDN的文风不同,本文不是一个vim命令大集合(其实在文末(//∇//)\),基本是想到哪写到哪,所以请大家当做段子看就好。

vim的技巧超多,还有一些提高vim日常操作效率的配置技巧,写不动了QAQ直接将自己的配置文件丢出来吧,在公众号夕小瑶的卖萌屋回复口令【vim】即可领取噢。

仅仅是“打开看一下”这个动作,vim就有非常非常多的玩法,可以让你非常方便的处理各种狗血的文件!

优雅的移动

很多初学者在光标移动、翻页问题上就被vim劝退了。对于比较保守的小伙伴,可能打开vim的第一件事就是按一个i进入插入模式,然后就开始上下左右移动光标了╮( ̄▽ ̄"")╭

要完成移动,确实有很多命令,但其实完全没必要都去记住,仅仅留几个常用的就好。

例如对于如下一个文件

如果想要在行内移动光标,怎么办呢?

初学者可能就按住→这个箭头,慢慢挪了╮( ̄▽ ̄"")╭这种是字符级的移动,速度非常慢。此时完全可以用wb来前后移动,分别表示向前或向后移动一个单词。词级别的移动就快多啦~

另外,如果你的目标恰好是在这一行的末尾附近,那么你完全可以用$(shift+4)来直接跳转到行末。想再次跳回行首,则可以通过^(shift+6)完成。

注:^代表开始,$代表结束,其实是个非常通用的表示,在正则表达式中也是如此

如果要跨行移动呢?

这时候要分两种情况讨论,一种是不需要翻页(同一个屏幕内),这时候可以一直按着↑或者↓来移动(划掉),还可以 数字+方向键 来一次性跳多行(例如 5↓就代表往下移动5行);另一种就是不仅要跨行,而且目标没有出现在当前视野范围内,需要翻页,那么就可以用ctrl+fctrl+b来往前或往后翻。

跨屏幕移动跟行内移动一样,也会面临移动到头部和尾部的问题。若希望直接移动到文件结尾,则可以用G(shift+G)直接跳转到文件最末行,gg回到文件第一行。还可以通过N + % 跳转到文件的N%处,比如50 + %直接跳转到文件中间位置。

此外,还有定向移动,也就是查找啦~

/text直接查找跳转到text位置,如果text在文件中多次出现,可以用n/N向下/上跳转。vim的查找模式还支持正则表达式。举个例子,/^$可以查找空白行(文首^和文尾$中间为空),/^I^I(/+Tab+Tab)查找制表符分隔的数据是否存在空值。

奇怪的文件格式与编码

tsv(制表符分隔)文件算是nlper最常遇到的数据集格式了由于vim界面很简单,所以不会有很清晰的分隔,这时候可以用:set list显示制表符和行尾,最后:set nolist取消。

当我们查看一些中文数据集时,有可能出现乱码的情况。

这其实是一个GB18030编码的中文文件,:set fileencoding查看当前文件编码。如上图红框所示(当vim无法识别文档的编码的时候,会使用latin-1去读取)。这时候可以通过:e ++enc=gb18030强行使用GB18030编码重新打开文件。

上面的命令都只是临时修改文件编码,大家也可以根据自己的经常使用的文件编码,在~/.vimrc文件中修改fileencoding配置。

愉快地编辑

在谈论怎么愉快地编辑之前,先说一下怎么优雅的进入编辑模式。

vim可以通过很多字母进入编辑模式,比如a、A,i、I,o、O等,不同的字母进入插入模式时光标的位置不同。按照小鹿的使用频次排序如下:

  1. i在光标原有位置进入编辑模式;

  2. o在光标所在处另起一行进入编辑模式;

  3. A在光标所在行行末处进入编辑模式;

  4. I在光标所在行行首处进入编辑模式;

  5. a在光标右边开始插入(这个一般与光标移动命令搭配使用);

  6. O在光标所在处往上另起一行进入编辑模式(这个模式一般用于文首插入空白行);

(感到懵逼的小伙伴请找个文件自行体会【手动狗头】

进入编辑模式后,就可以像之前一样随意玩耍了。不过,其实插入模式下也是可以使用一些“命令”的,只不过这些可能是系统级的了。比如ctrl+w可以删掉一个单词,shift+左右可以左右移动一个单词(mac原生的terminal支持较好)。多掌握一些类似的tricks可以大大减少模式切换的频率,提高生产力。

命令模式下的简单编辑

对于一些简单的编辑操作,其实无需进入编辑模式也能完成。例如,在命令模式下,x可以完成剪切(当删除来用也没大毛病),v模式下选中文本后通过d可以删掉这些选中的文本,dd删除一行,数字+dd删除若干行,:n,md删除第n到第m行等等。除了通过x进行剪切,也可以通过v模式+yyy复制,然后通过p进行粘贴。这些操作都非常常规了,网上资料很多,就不赘述啦。

这里其实容易面临一个令人头疼的问题,就是无论通过d还是x,删掉的内容都会默认进入剪贴板,这就会导致边删边贴变得很麻烦。一个解决方案是使用“黑洞”来将d命令改造成真正的删除。

nnoremap d "_d

这时候如果希望像之前使用dd一样剪切整行,就可以通过V+x(shift+v可以直接选中整行)来完成整行的剪切啦。不过还是需要一两天的适应期的。

批量编辑

“替换”是啪代码的超高频的操作,也可以用来编辑小型数据集文件和日志文件。

Tips: 先高亮查找,大体扫一遍后再执行替换可以大大降低造bug的概率

是时候祭出这张图了:

命令模式下输入上面????的命令即可在全文范围将所有old替换成new。

对于作用范围,常用的表达有:

%s #全文范围
s #光标所在行
n, ms #从第n行到第m行
., $s #光标所在行到文末,还没忘记$表示最末叭

同search一样,旧模式的匹配也同样支持正则表达式,最后的g表示作用到范围中的所有匹配,没有g表示仅作用到所属范围每一行的首个匹配。

结合^/$,可以使用查找替换命令在多行的行首或者行末添加内容。比如,8,16s/^/#实现对8到16行添加注释:

此外,前面也多次提到的v模式(可视模式Visual Mode),跟插入模式的组合技也是一个批量编辑的神器。

v模式+i模式的组合技最常见的操作就是批量注释啦。ctrl+v进入垂直v模式,移动光标选中需要注释的行之后,进入插入模式添加注释后,两次Esc即可完成批量注释。

这个操作不仅可以拿来注释,更是编辑数据集的神器(比如批量添加伪标签列),也是编辑调参bash文件的神器等。相关的进阶玩法下一篇再讲~

多文件操作

vimdiff

在快速开发迭代实验想法的时候,一个代码可能会衍生出n个版本,主干部分可能都差不多,唯一不同的是需要实验验证的一小部分(此处强烈推荐使用git实现版本管理,维护实验环境安全可回溯????)。而vimdiff file1 file2则可以快速帮助定位两个文件的异同,查看不同版本代码的差异~效果如下:

分屏

当我们阅读或者开发一个层级比较深的项目代码的时候,分屏打开多个文件可以大大提高效率,减少我们的记忆负担(有什么忘记了看一下右边的window就好????)

虽然vim支持分屏打开多个文件(横屏/竖屏/纵横交错皆可),但是小夕一般喜欢竖屏打开2-3个文件就好。(分屏太多会加剧操作的复杂度,增加失误的可能性)

以竖屏打开两个文件为例,如果事前就确定要打开的文件,可以vim -O file1 file2直接打开,显示类似vimdiff的效果。如果是已经用vim打开了file1后,需要分屏打开一个新文件可以:vs file2(vs指vertical split)。

实现分屏后,之前介绍的所有命令都可以直接作用在光标所在的window。所以对于vim的分屏使用我们只需要再掌握各window之间如何跳转就好~

ctrl + w + ←(h)/↑(j)/↓(k)/→(l)可以精确控制跳转的方向,但是当分屏数不太多的时候,也可以精简成一个命令ctrl + w + w跳转到下一个window就好~

看到这里其实就可以使用组合技实现大多数分屏操作了。我们来举个栗子,如何利用分屏实现跨文件的复制粘贴?

假如分屏是这个样子的,然后需要把右边文件中的2-15行复制到左边的文件中。那么ctrl + w + w光标跳转到右边;13yy复制多行(出现红框的提示);再ctrl + w + w光标跳转到左边;挪动到需要复制的位置,p复制;即可~

最后的效果如下。如果file2的作用已经完成,那么ctrl + w + c关掉该窗口就可以功成身退了~

还有一些提高vim日常操作效率的配置技巧,写不动了QAQ直接将自己的配置文件丢出来吧,在公众号「夕小瑶的卖萌屋」回复口令【vim】即可领取~

总结

本文谨分享了一些小鹿日常常用的vim命令,整理如下~更多命令可以:help查看官方使用文档

  1. ctrl + f 往后(forward)翻一页

  2. N + % 跳转到文件的N%处,比如50 + %直接跳转到文件中间位置;

  3. G(shif + g) 切换到文件最末尾;

  4. :set list 标识出制表符和行尾;

  5. :set nolist 取消标识

  6. /text 查找text,n向下跳转,N向上跳转

  7. /^$查找空行

  8. /^I^I(/+Tab+Tab) 查找空值

  9. sort 排序

  10. u撤回最近修改

  11. i在光标原有位置进入编辑模式;

  12. I在光标所在行行首处进入编辑模式;

  13. A在光标所在行行末处进入编辑模式;

  14. o在光标所在处另起一行进入编辑模式

  15. w/W 按符号划分word跳转(W步子更大些)

  16. %s/old/new/g 全文将old替换成new

  17. :n,md删除第n到第m行

  18. n, m co x将第n行到第m行复制到第x行

  19. n yy从光标所在行起复制n行,移动光标到需要粘贴的位置p实现复制

  20. :n,ms/^/#从第n行到第m行添加注释

  21. ctril + v进入可视模式 (Visual-mode),选中要编辑的行,i切换到编辑模式输入#然后Esc键从可视模式推出到正常模式,实现批量注释

  22. vimdiff file1 file2快速帮助定位两个文件的异同

  23. vim -O file1 file2垂直分屏打开两个文件

  24. :vs file2垂直分屏打开一个新文件

  25. ctrl + w + ←(h)/↑(j)/↓(k)/→(l)分屏时,按不同方向跳转window

  26. ctrl + w + w分屏时,跳转到下一个window

  27. ctrl + w + c关掉窗口

夕小瑶的卖萌屋

_

关注&星标小夕,带你解锁AI秘籍

订阅号主页下方「撩一下」有惊喜哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 | 端到端神经视觉问答之上的显式推理

链接:http://www.public.asu.edu/~cbaral/papers/2018-aaai-psl.pdf概述视觉问答(Visual Question Answering)现有两大类主流的问题, 一是基于图片的视觉问答(ImageQuestion Answering), 二是基于视频的视觉问答( Video Question Answering).而后者在实际处理过程中…

机器阅读理解首次超越人类!云从刷新自然语言处理新纪录

媒体动态发展历程资质荣誉人才招聘机器阅读理解首次超越人类!云从刷新自然语言处理新纪录 2019-03-11 10:06 浏览:454 近日,云从科技和上海交通大学在自然语言处理领域取得重大突破,在卡内基-梅隆大学发起的大型深层阅读理解任务数…

刚参加完阿里Java P6面试归来,6点面试经验总结!(含必考题答案)

这是来自于优知学院一位铁粉面试回来的总结经验 刚参加完蚂蚁金服的Java P6级的面试,一共参加了4面。面试归来,总结下阿里面试流程、面试过程、以及面试题目范畴。文末有阿里Java P6面试必考题与答案参考~ 阿里面试流程 第一轮:电话技术初面…

如果你不小心打开了这篇文章,请你看完后关掉,不要转发,不要留言,不要问怎么了,不要说你还好吗,也不要给予任何问候。因为我还当,这里是那个三年前,只有陌生听众的地方。今天&#xf…

机器阅读(一)--整体概述

https://plmsmile.github.io/2019/03/30/54-mrc-models/ 主要包含:机器阅读的起因和发展历史;MRC数学形式;MRC与QA的区别;MRC的常见数据集和关键模型 发展动机 传统NLP任务 1) 词性分析 part-of-speech tagging :判断词…

论文浅尝 | 用图网络做小样本学习

链接: https://arxiv.org/abs/1711.04043本文提出了用 GNN(GraphNeural Network) 来解决 Few-Shot Learning 场景的分类问题。在 Few-Shot Learning 中,每个类别的训练样本数据较少,如果直接训练一个多分类模型,会由于每个类别的样…

史上最强Dubbo面试28题答案详解:核心功能+服务治理+架构设计等

1.Dubbo是什么? Dubbo 是一个分布式、高性能、透明化的 RPC 服务框架,提供服务自动注册、自动发现等高效服务治理方案, 可以和 Spring 框架无缝集成。 RPC 指的是远程调用协议,也就是说两个服务器交互数据。 2.Dubbo的由来&…

数据缺失、混乱、重复怎么办?最全数据清洗指南让你所向披靡

一只小狐狸带你解锁 炼丹术&NLP 秘籍正文来源:机器之心前言要获得优秀的模型,首先需要清洗数据。这是一篇如何在 Python 中执行数据清洗的分步指南。在拟合机器学习或统计模型之前,我们通常需要清洗数据。用杂乱数据训练出的模型无法输出…

深度学习技术在机器阅读理解应用的研究进展

深度学习解决机器阅读理解任务的研究进展:https://blog.csdn.net/malefactor/article/details/52832134 深度学习技术在机器阅读理解应用的研究进展:https://www.imooc.com/article/30060 /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 …

论文浅尝 | 基于开放世界的知识图谱补全

Citation: Baoxu Shi and Tim Weninger (2017). Open-World Knowledge Graph Completion 6, AAAI 2018传统的知识库补全算法如TransE等都是基于Close world assumption 的,也是就说补全的实体必须在知识图谱内。然而事实上大规模的知识图谱是一直进化的,…

快速排序quicksort算法优化

1.基本想想 快速排序使用分治的思想 通过一趟排序将待排序列分割成两部分,其中一部分所有元素均比基准大,另一部分均比基准小 分别对这两部分元素继续进行排序,以达到整个序列有序 2.快排的步骤 1.选择基准 在待排序列中,按…

阿里P8架构师谈:Dubbo的详细介绍、设计思路、以及4大适用场景

Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。 简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有…

巨省显存的重计算技巧在TF、Keras中的正确打开方式

一只小狐狸带你解锁 炼丹术&NLP 秘籍作者:苏剑林(来自追一科技,人称“苏神”)前言在前不久的文章《BERT重计算:用22.5%的训练时间节省5倍的显存开销(附代码)》中介绍了一个叫做“重计算”的…

论文浅尝 | 用可微的逻辑规则学习完成知识库推理

Citation:Fan Yang,Zhilin Yang, William W. Cohen. Differentiable Learning of Logical Rules for Knowledge Base Reasoning. ICLR 2017.动机本文提出了一个可微的基于知识库的逻辑规则学习模型。现在有很多人工智能和机器学习的工作在研究如何学习一阶逻辑规则&…

一点关于cloze-style问题的简谈

一个小任务:给出一个问题和诺干个候选句子,从候选句子中选出答案,有没有好的实现方案? 一个小任务:类似于:“中国最大的内陆湖是哪个?”给出候选句子1.”中国最大的内陆湖,就是青海湖…

中文词语概念上下位图谱项目

HyponymyExtraction 项目地址:https://github.com/liuhuanyong/HyponymyExtraction HyponymyExtraction and Graph based on KB Schema, Baike-kb and online text extract, 基于知识概念体系,百科知识库,以及在线搜索结构化方式的词语上下位…

POJ 1007 DNA排序解题

题目链接 http://poj.org/problem?id1007 C代码实现 #include<string> #include<iostream> using namespace std; struct DNAdata //定义结构体 {char name[51];double sum;DNAdata(){sum 0;} }; void swapDNA(DNAdata *a, DNAdata *b) {DNAdata tempDNA;tempDN…

DeepMatch:用于推荐广告的深度召回匹配算法库

一只小狐狸带你解锁 炼丹术&NLP 秘籍前言今天介绍一下我们的一个开源项目DeepMatch&#xff0c;提供了若干主流的深度召回匹配算法的实现&#xff0c;并支持快速导出用户和物品向量进行ANN检索。非常适合同学们进行快速实验和学习&#xff0c;解放算法工程师的双手&#xf…

史上最全Spring面试71题与答案

1.什么是spring? Spring是个java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发&#xff0c;并通过POJO为基础的编程模型促进良好的编程习惯。 2.使用Spring框架的好处…

论文浅尝 | 近期论文精选

本文转载自公众号 PaperWeekly, 对我们近期的论文浅尝进行了精选整理并附上了相应的源码链接&#xff0c;感谢 PaperWeekly&#xff01;TheWebConf 2018■ 链接 | https://www.paperweekly.site/papers/1956■ 解读 | 花云程&#xff0c;东南大学博士&#xff0c;研究方向为自然…