热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vim寄存器操作_Vim内置终端调教记

周末有空,写篇短文帮大家提高vimnvim中的工作效率。VimNeoVim的内置终端都发布了差不多两年了,但是大家还是习惯用vimtmux的组合

周末有空,写篇短文帮大家提高 vim/nvim 中的工作效率。

Vim/NeoVim 的内置终端都发布了差不多两年了,但是大家还是习惯用 vim+tmux 的组合,宁肯在 tmux 里分割 split 也不肯使用 vim 的内置终端?

有没有办法让内嵌终端变得更好用一些呢?让它真的能帮到我们优化自己的工作流,提高操作的效率呢?学习了一圈 emacs / vscode 等编辑器的内嵌终端,我写了个 200 行的小脚本,对 vim/nvim 的内嵌终端进行一些简单的调教:vim-terminal-help。

这个小脚本对三个小地方进行了一些改进:

第一:提供一个 ALT+= 的快捷键可以像 vscode 的 CTRL+backtick 一样用来打开/关闭终端窗口,不用每次输入 :terminal ,同时新终端会把 shell 的工作目录初始化成你上面正在编辑的文件所在的目录,因为你大部分时候临时想搞点什么一般都是针对你当前正在编辑的文件来操作,那么初始化成当前文件的目录就避免了你每次打开终端再 cd 一半天:

3772301dd28ab55b52c626832d2ea08a.png
按 ALT+= 在正下方打开终端,路径自动帮你定位到上面文件所在目录

所以工作流程就是你编辑着当前文档,突然想搞点啥然后 ALT+= 在正下方打开终端,敲几行命令,运行完了就再 ALT+= 把它收起来,整个流程十分顺畅。多次 ALT+= 不会无止境的打开新终端,只会复用已有的,而如果你再终端里输入了 exit 结束了 shell 进程,那么再次按 ALT+= 才会创建一个新的终端。

第二:初始化了一组快捷键 ALT+SHIFT+hjkl 用来在终端窗口和其他窗口之间跳转,很多 vim 用户过去都习惯设置 CTRL+hjkl 来做窗口跳转,普通窗口没问题,但是终端窗口下面,CTRL+hjkl 本身就是各种终端程序高频使用的组合键,你外面 tnoremap 覆盖掉了,里面你想运行个 fzf 都没有办法用 CTRL+j/k 在 fzf 里面上下移动光标了。因此这个小脚本鼓励大家使用新的 ALT+SHIFT+hjkl 来做窗口切换,这几个键在终端内相对用的少一些。

第三:在终端内提供一个名叫 drop 的命令,当你在终端中突然想编辑某个文件,直接 drop xxx 命令就能通知到外层的 vim 来打开该文件了,因为 vim 的当前目录和终端内 shell 的当前目录经常不一致,你在内嵌终端里 cd 到了 xcode 种很深的一层目录,这时想让外层的 vim 打开一个文件有多麻烦?先要切换会终端的 normal 模式去,然后在 vim 种输入常常的::e .... 后面接长长的一串路径名(因为二者当前路径不同)。所以这个 drop 命令(兼容 win/linux, vim/neovim)存在的意义就是让你能在终端内以最快捷的方式让 vim 打开一个文件。

--

我平时会用 vscode 来编辑 markdown,vscode 的 CTRL+backtick 切换内嵌终端的功能确实很顺手,我用的很多,用来运行命令行工具编译/发布 markdown。而同样终端下的 emacs 的用户也基本都在用内置的各种终端,而很少用外面的 tmux。 所以从道理上来讲 vim/nvim 的内嵌终端应该是可以更好用一点的,不至于像现在这样很少被人用。

就像苹果的 airpod 耳机,其实无线耳机技术上并没有什么新的东西,其他品牌的无线耳机好多年前就有了,但是用的人真的不多,而 airpod 做的其实也很简单,就是持续在不同的细节地方改进用户体验,然后把续航时间大大增长,最终量变积累形程质变,今天 airpod 如此受人欢迎。基于前面的经验,我想,或许,我们可以通过改进内置终端的各处体验,最终真的让他真的变得好用,变得能够帮到大家。

我自己用了一段时间后发现,当然不能完替 tmux 操作,但代替了不少之前需要 vim+tmux 协同的工作,的确感觉到比以前的方便。就像以前我在 Windows 下从来不用 GVim 内置终端的,现在也开始用了,比如正在写 python 代码,发现需要安装个包,以前是要打开 windows 菜单,然后运行 cmd ,然后再 pip install,打断太多了。现在同样的事情我就倾向于 ALT+= 打开内置终端(我配置的是 powershell),然后 pip install 一个包,完事就 ALT+= 收起来,比以前顺畅太多,全键盘操作,工作流根本不会中断。

所以用了一段时间,又根据朋友的反馈做了一些调整优化,归纳成个小脚本共享出来。

skywind3000/vim-terminal-help

--

补充:评论区说不知道内置终端如何滚屏,原来很多人还不知道内置终端也分 normal/insert 两种模式,正常终端操作,输入文字是 insert 模式,在 insert 模式中按 就可以切换到终端 normal 模式了,然后你可以像 vim buffer 一样正常的 hjkl 漫游,正常的滚屏,复制内容。弄完了以后再按 i/a 回到 insert 模式中接着输入终端命令。

另外从 vim 寄存器到 终端粘贴内容的操作因为 vim/nvim 不一样,vim 的终端粘贴是在终端 insert 模式下按 termkey + " + 寄存器 ,termkey 在这个脚本里是 ,而 neovim 的终端是可以直接在 normal 模式下像普通 vim buffer 一样粘贴。

觉得有点麻烦?没关系啊,自定义按键即可,内嵌终端最方面的就是可以用 tnoremap 修改按键,比如你嫌弃 切换 normal 模式麻烦,你大可以定义成 ALT+q:

tnoremap

当心覆盖了内部软件的常用快捷键的话,可以改成 ALT+SHIFT+q:

tnoremap

为了方便,所以最新版的脚本中我增加了一个 ALT+- 的映射,可以让你再终端里按 ALT 和减号就粘贴 0 号寄存器了,vim/nvim 兼容。



推荐阅读
  • 如何在Linux环境中高效地创建、编译与运行C语言代码
    本文面向第一次在linux尝试写C语言程序的新人。有经验的请绕行。C语言用法不是本文介绍的关键,本文只是引入如何第一次在linux系统下编写、编译和执行一个简单的c程序。学会后请自行深入 ... [详细]
  • 深入解析:Android开发进阶之Vim编辑器基础操作与应用
    本文深入探讨了Android开发中使用Vim编辑器的基础操作与应用。通过详细解析Vim的基本命令、配置文件和常用插件,帮助开发者提高代码编写效率。文章还介绍了如何在Android开发环境中高效利用Vim,包括集成开发环境(IDE)的配置和常见问题的解决方法。适合初学者和有经验的开发者参考。 ... [详细]
  • BashShell作为Linux的指定合作伙伴我们已经再熟悉不过了,使用Bash可以快速编写简单的脚本方便我们的日常比如善用vim,awk和sed三剑客,也可以创建十分复杂的逻辑, ... [详细]
  • 本文首先对信息漏洞的基础知识进行了概述,重点介绍了几种常见的信息泄露途径。具体包括目录遍历、PHPINFO信息泄露以及备份文件的不当下载。其中,备份文件下载涉及网站源代码、`.bak`文件、Vim缓存文件和`DS_Store`文件等。目录遍历漏洞的详细分析为后续深入研究奠定了基础。 ... [详细]
  • Python数据分析入门指南:全面了解Python在数据科学中的应用 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • PyQt5 QTextEdit:深入解析Python中多功能GUI库的应用与实现
    本文详细探讨了 PyQt5 中 QTextEdit 组件在 Python 多功能 GUI 库中的应用与实现。PyQt5 是 Qt 框架的 Python 绑定,提供了超过 620 个类和 6000 个函数及方法,广泛应用于跨平台应用程序开发。QTextEdit 作为其中的重要组件,支持丰富的文本编辑功能,如富文本格式、文本高亮和自定义样式等。PyQt5 的流行性不仅在于其强大的功能,还在于其易用性和灵活性,使其成为开发复杂用户界面的理想选择。 ... [详细]
  • Python正则表达式详解:掌握数量词用法轻松上手
    Python正则表达式详解:掌握数量词用法轻松上手 ... [详细]
  • 手机上编写和运行PHP代码的最佳软件推荐 ... [详细]
  • 如果你对 IntelliJ IDEA 的界面不太熟悉,可能会对如何在 Android Studio 中执行一些常见任务感到困惑。本文提供了多种开发技巧和实用窍门,帮助开发者更好地利用 Android Studio 的强大功能,包括界面导航、代码调试和项目管理等方面,使开发过程更加高效顺畅。 ... [详细]
  • 如何在Linux系统中部署TensorFlow的详细指南
    本文详细介绍了在Linux系统中部署TensorFlow的过程。作者基于北京大学曹建教授的MOOC课程进行学习,但由于课程内容较旧,环境配置方面遇到了不少挑战。经过多次尝试,最终成功解决了这些问题,并总结了一套详细的安装指南,帮助初学者快速上手TensorFlow。 ... [详细]
  • 【技术分享】如何通过恶意插件在Atom中植入后门
    【技术分享】如何通过恶意插件在Atom中植入后门 ... [详细]
  • Haskell学习笔记:探索函数式编程之美
    使用教材:《learnyouaHaskell》,中文1-8章戳我准备工作。编译器&调试器:安装HaskellPlatform, ... [详细]
  • 深入学习 Python 中的 xlrd 模块:掌握 Excel 文件读取技巧
    本文深入探讨了 Python 中的 xlrd 模块,重点介绍了如何高效读取 Excel 文件(包括 xlsx 和 xls 格式)。同时,文章还详细讲解了 xlwt 模块在 Excel 文件写操作中的应用。此外,文中列举了常见单元格数据类型及其处理方法,为读者提供了全面的实践指导。 ... [详细]
  • ANSI
    ANSI是什么编码?用Notepad创建一个文本文件text.txt,其默认编码格式为ANSI(乍看之下,还以为是ASCII ... [详细]
author-avatar
mobiledu2502927537
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有