摘要:intro 在使用YCM完成c++输入提示(complete)时可以注意到一个细节:通常只有后输入“.”,"->","::"的时候提示的才是提示字段的类型信息。对于函数,提示包含了函数的参数类型等信息;对于数据成员,提示中也包含了类型信息。 对应地,其它情况下尽管提示中可能会包含变量名,但是不会在p
阅读全文
摘要:intro 在使用YCM的自动提示功能时,可以注意到选择complete提供的条目时,窗口的上面还有一个小窗口提示这个函数的声明信息,包括了函数的参数列表和类型信息。 这个对写代码非常有用,对于一段时间不看的函数,很容易记不得函数的参数列表和各自的类型信息,以至于在官方issue中希望提供一个可以显
阅读全文
摘要:intro 在vim的入门介绍中,明确说明了vim是一个"文本编辑器"(text editor)而不是一个程序编辑器,和C/C++的预处理(preprocessor)一样,vim本身并不理解程序的结构。 Introduction intro Vim stands for Vi IMproved. I
阅读全文
摘要:intro 当使用vimdiff来获取另外一个文件的diff内容时,在Ex模式下使用的是diffget,但是在normal模式下对应的cmd却不是对应的dg而是另一个do(diff obtain),这个都少有些意外。 单单的对于"为什么vim使用do而不是dg命令来获得diff?"这个问题,其实在v
阅读全文
摘要:intro 在使用vim的时候,一个非常常用的功能就是搜索功能。 搜索 在缺少工程级别搜索的情况下,搜索通常不是一次完成的:通常的场景是提供一个最明显的关键字(并且忽略大小写),然后从结果中再缩小搜索范围,直到找到搜索结果。在这个迭代的过程中,可能需要从上次的输出中拷贝一部分、简单编辑之后再次搜索。
阅读全文
摘要:intro 由于每次vim都启动一个ycmd服务进程,并且端口地址是由vim客户端指定的(因为ycmd启动之后vim客户端需要连接过去),所以vim在指定端口的时候就需要给出一个当前没有使用中的端口。 那么如何获得一个未使用的端口呢? tsecer@harry: ps aux | fgrep ycm
阅读全文
摘要:问题 尽管VS Code提供了在windows下通过ssh访问linux机器的各种便利,但是使用vim在linux环境下开发可以方便的使用从Unix系统中继承的强大工具集(例如grep命令),并且构建、部署也更加方便。加上vim丝滑的操作流,使得linux环境下vim开发依然有着很大的吸引力。 但是
阅读全文
摘要:寄存器 在软件开发过程中,Ctrl-C和Ctrl-V是程序员的核心技能,这就不可避免的涉及到复制,粘贴,删除。在windows环境下,大家习惯了只有一个系统剪切板,复制之后直接粘贴还是比较方便。在vim环境下,有更多的寄存器可以选择:26个字母(大小写分别对应不同用途),还有0——9共10个数字对应
阅读全文
摘要:背景 在vim的使用过程中,会发现一些比较冷门但是也非常有用的命令,整理备忘一下。 行中(gm) 修改一行开始和结尾都有比较方便的命令,但是当行比较长的时候,如果想移动到中间某个为止就比较麻烦,此时可以通过gm来首先移动到行的中间,然后再使用w/b甚至f/u来进行小范围移动。 复选(gv) 在手动缩
阅读全文
摘要:引入 vim内置命令中包含了text object相关功能,这些功能可以在vim的 :h motion.txt 帮助文档中找到相关帮助。这个功能看起来实现比较简单,而且是一个非常实用的功能。这个功能之所以加入比较晚,在于它使用a和i并不是传统的motion动作,而是normal模式下的插入(inse
阅读全文
摘要:一、vim对python脚本的支持 vim作为一个开发环境,不仅支持原生的vim脚本,还支持其它的动态脚本语言,例如lua、ruby、perl、python等。这些脚本语言在vim的源代码中都是通过if_XXX型文件实现。具体对于python的支持来说,实现在if_python.h、if_pytho
阅读全文
摘要:零、问题 在vim中有一个,英文句号(.)能够重复前一个执行的命令,在vim的帮助文档中可以看到下面的描述. Repeat last change, with count replaced with [count]. Also repeat a yank command, when the 'y'
阅读全文
摘要:一、文件类型 在使用vim编辑一个文件的时候,如果能够识别出文件的类型,加上对应的高亮规则,可以使文件的查看更加醒目,这个功能几乎是使用vim浏览文件的一个核心诉求。另外,在进行文件编辑的时候,特别是使用vim写代码的时候(典型的场景是通过vim写C/C++代码),如果能够智能缩进,还可以减少敲代码
阅读全文
摘要:一、拷贝/粘贴 拷贝粘贴可能是计算机中最重要的一个操作,该操作发明者“Larry Tesler”于2020年逝世,但是这个操作的提出者还是因为这个操作被缅怀和记忆。在常规模式(normal mode)下,大家都知道通过yank+paste进行操作,但是有时候在命令模式(command mode)下也
阅读全文
摘要:一、脚本 和大部分Unix工具一样,vim也提供了内置的脚本功能,通过脚本可以完成定制化设置。脚本的优点在于正如它名字所暗示的:可以存储在文件中。而文件可以持久化,也就是下次打开的时候依然存在。脚本中通常还可以定制函数以实现复用。例如,在常用的CtrlP插件中,大部分功能都是使用vim内置命令完成的
阅读全文
摘要:一、问题 明显的,在normal模式下,通过hjkl四个按键进行移动,但是之类的问题是vim如何移动光标而不是用户怎么移动光标。在bash界面中,我们通过通过方向键来移动光标位置。在vim中,vim是完全控制了当前终端,假设你获得了终端的控制权,你将如何控制光标在整个终端的任意位置进行移动呢? 二、
阅读全文
摘要:一、command模式下命令如何匹配 在command模式下,输入:h默认执行的是help,但事实上,还有字典序更靠前的hardcopy命令,那为什么这个h匹配的不是hardcopy而是help呢?在代码中其实已经做了说明ex_cmds.h: /* * This array maps ex comm
阅读全文
摘要:一、问题 在vim的编辑模式下,我之前一直以为只能进行字符的插入操作,但是意外看到可以在编辑模式下通过ctrl-w来前向删除一个单词,并且可以通过ctrl-h来前向删除一个字符。根据通常的ASCII码内置控制方法,通过ctrl-h对应的是ASCII码的BS(backspace)字符,所以通过ctrl
阅读全文