前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >硬核程序员教你如何花式退出 Vim,一周收获 2400 星

硬核程序员教你如何花式退出 Vim,一周收获 2400 星

作者头像
GitHubDaily
发布2020-01-16 15:25:33
8750
发布2020-01-16 15:25:33
举报
文章被收录于专栏:GitHubDaily

转自量子位,作者晓查

程序员们最常用的代码编辑器是什么,Vim、Emacs、VS Code、Sublime…… 众说纷纭。

但是要说最让程序员头大的代码编辑器,那毫无疑问是 Vim。可以说是 “天下苦 vim 久矣”

Vim 到底有多让人头大?如果你是个初学者,甚至都不知道怎么退出它。

最近,有位程序员 Luke Stephens,上线了一个 GitHub 项目,叫做如何退出 Vim,仅仅一周已经收到了 2400 星。

Luke 是从各个程序员的 Twitter 中找到的这些方法,把他们汇总起来,既硬核又幽默,唤起了众多程序员学习 Vim 那段不堪回首的记忆。让我们一起来看看吧!

硬核退出 Vim

最简单的方式,就是找到 vim 进程,并把它杀死:

代码语言:javascript
复制
:!ps axuw | grep vim | grep -v grep | awk '{print $2}' | xargs kill -9

(这是欺负我不懂 Vim 啊,最简单的方式明明不应该是:q 吗?)

不用显示进程的 ps 命令,其实也可以退出 Vim:

代码语言:javascript
复制
:!kill -9 $(find /proc -name "cmdline" 2>/dev/null | while read procfile; do if grep -Pa '^vim\x00' "$procfile" &>/dev/null; then echo $procfile; fi; done | awk -F'/' '{print $3}' | sort -u)

Luke 自己也提出了一种不用 ps 命令的方法,需要用到状态文件:

代码语言:javascript
复制
:!find /proc -name status | while read file; do echo "$file: "; cat $file | grep vim; done | grep -B1 vim | grep -v Name | while read line; do sed 's/^\/proc\///g' | sed 's/\/.*//g'; done | xargs kill -9

如果你嫌上面两种不用 ps 命令的方式太长,还有一种简短的方式:

代码语言:javascript
复制
:!grep -P "PPid:\t(\d+)" /proc/$$/status | cut -f2 | xargs kill -9

对于 Python 用户,你们有一种 “Python 方式” 来退出 Vim:

代码语言:javascript
复制
:py3 import os,signal;from subprocess import check_output;os.kill(int(check_output(["pidof","vim"]).decode
('utf-8')),signal.SIGTERM)

Luke 还列出了一种 “最简短” 的方式(原文如此:The shortest way),我看你是在讽刺吧:

代码语言:javascript
复制
:!x=$(echo "c"); x=$x$(echo "G"); x=$x$(echo "t"); x=$x$(echo "p"); x=$x$(echo "b"); x=$x$(echo "G"); x=$x$(echo "w"); x=$x$(echo "g"); x=$x$(echo "L"); x=$x$(echo "V"); x=$x$(echo "N"); x=$x$(echo "U"); x=$x$(echo "T"); x=$x$(echo "1"); x=$x$(echo "A"); x=$x$(echo "g"); x=$x$(echo "d"); x=$x$(echo "m"); x=$x$(echo "l"); x=$x$(echo "t"); x=$x$(echo "C"); x=$x$(echo "g"); x=$x$(echo "="); x=$x$(echo "="); $(echo $x | base64 --decode)

对 Vim 降维打击

上面的方法都离不开对 Vim 本身的操作,我们还有更高级的 “降维打击” 方式。既然退出 Vim 这么麻烦,不妨在更高层级把它干掉。

如果是在 Docker 容器中运行 Vim,比如这样:

代码语言:javascript
复制
docker run --rm -it --name my-vim -v `pwd`:/root thinkca/vim

那么你可以把 Docker 容器停止并退出,这样不就关掉了吗?我真是太机智了!

代码语言:javascript
复制
docker stop my-vim

在系统层级上,我们也可以用设置超时的方法杀死 Vim:

代码语言:javascript
复制
$ timeout 600 vim

设置以上代码,Vim 运行超过 10 分钟就会关闭,从此一劳永逸,再也不用输入退出命令了。不过你得抓紧时间把代码改完,并保存好,否则就惨了。

哦,最后别忘了把 Vim 改成默认 10 分钟关闭:

代码语言:javascript
复制
$ alias vim='timeout 600 vim'

暴力与佛系方法

最直接、最暴力的方法就是拔电源。最佛系的方法就是直接走开

如果你非要问我有什么暴力与佛系结合的方法,请收好以下代码,运行后直接离开座位即可。

代码语言:javascript
复制
!bash -c “?(){ ?|?& };?”

不要在自己电脑上轻易尝试,后果自负。

职场方法

如果你是公司初来乍到的新手,或者是实习生,不敢随便在电脑上操作,建议采取以下措施:

找到一个高级工程师:“人家不会关 Vim 啦!嘤嘤嘤。”

对于产品经理,Luke 给出了详细流程:

  1. 提需求(比五彩斑斓的黑要容易多了)
  2. 设置为最高优先级(你们先把手头工作放一放)
  3. 随机分配给团队成员(谁行谁上)

对于资深产品经理来说,这个流程显然是不够详细的。

在第 2 步以后,必须开几次会,定义一下验收标准、讨论一下工作流程、设置时间线,最后项目完成后,大家还要开个总结经验大会。完美!

Vim:从入门到放弃

看着上面的种种方法,你是不是已经逐渐忘记了标题。Luke 的项目本来是汇总一下大家对 Vim 的吐槽,没想到在 Hacker News 上引发的严肃的讨论。

有人说,笑话归笑话,Luke 没有给出退出 Vim 的真正方法,万一初学者在搜索引擎里找到这个项目,那岂不是误人子弟。

最好的办法就是,远离 Vim。Vim 陡峭的学习曲线让不少新入门的程序员望而却步,不过好在已经有 VS Code、Sublime 等带图形的代码编辑器可以取而代之。

至于你究竟会不会退出 Vim,其实不重要。有人不会退出 Vim,不还是坚持用了 3 年嘛。

什么从入门到放弃?我压根就没入门 Vim,谈何放弃?

传送门

GitHub 地址: https://github.com/hakluke/how-to-exit-vim

Hacker News 讨论: https://news.ycombinator.com/item?id=21988968

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 GitHubDaily 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 硬核退出 Vim
  • 对 Vim 降维打击
  • 暴力与佛系方法
  • 职场方法
  • Vim:从入门到放弃
  • 传送门
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档