写在前面:我“胡汉三”又回来了~上周顺利通过了试用期答辩,现在俺是一名正式的鹅厂人啦。哈哈哈~感谢各位可爱又热心的好伙伴对我的“不离不弃”。

话休絮烦,今天分享下在Vim中执行shell命令的几个小知识。

可以在 Vim 内部调用外部程序(如shell命令),还可以把缓冲区的内容作为标准输入传递给外部命令,或是把外部命令的标准输出导入到Vim缓冲区。

一、在Vim内部执行shell命令

在 Vim 的命令行模式中,在命令前加一个 ! 前缀 (参见:h :! ) 就可以调用外部的shell程序。

例如,如果想在Vim内部查看当前目录下的所有文件,可以在Vim命令行模式下运行命令 :!ls 。

:!ls:ls 是两个不同的Vim命令,前者是在Vim中调用shell命令 ls,用于列出目录下的所有文件,后者调用的是 Vim内置命令 ls,用来显示当前缓冲区列表的内容,可以参考Vim文件缓冲区列表介绍。

如Vim打开和保存文件所介绍,在 Vim 的命令行模式下,符号 % 代表当前文件的完整路径(参见:h cmdline-special)。如果我们正在通过Vim编辑某个 python 文件,则可以用命令 :!python % 直接执行该文件。

二、启动一个可交互的shell进程

上面介绍的 :!{cmd} 这种语法适用于执行一次性命令,如果想在 shell 中连续执行多条命令,可以执行 Vim 的 :shell 命令启动一个可交互的 shell 会话,在执行完所需要的命令后用 exit 命令退出此 shell 并返回到原始的 Vim 进程。

三、Vim缓冲区内容作为输入/输出

在Vim命令行模式下执行某个Vim命令 :!{cmd} 时,Vim 会回显 {cmd} 命令的输出。可以用 :read !{cmd} 命令把 {cmd} 命令的输出重定向当前Vim缓冲区中,或使用 :write !{cmd} 把当前Vim的缓冲区内容作为指定 {cmd} 的标准输入。

例如,在Vim命令行模式下执行命令 :write !sh 后会在 shell 中执行当前缓冲区中的每行内容。假如当前所在目录包含如下的文件:

1.cc2.cc3.cc

如果我希望把 .cc 后缀更名为 .cpp,可以在Vim中通过 :read !ls *.cc 命令将shell命令 ls *.cc 的输出重定向到Vim缓冲区中,再使用Vim替换命令 :%s/\(.*\).cc/mv & \1.cpp 生成shell重命名命令 mv,最后使用 :write !sh 执行当前缓存区中的每一行,从而达到对所有 .cc 文件重命名为 .cpp 的目的。

PS:“Vim教程”这个主题俺觉得有点太小了,如果我想扩大下公众号的写作内容,比如还写写makefile, gdb, 正则表达式等等,不知道小伙伴们怎么看呢?

lua执行shell命令6_Vim执行shell命令及使用Vim批量更改文件名相关推荐

  1. linux sed名宁,Linux shell利用sed批量更改文件名的方法

    微子网络与大家分享了在Linux shell中使用sed批量更改文件名的方法.希望你看完这篇文章有所收获.大家一起讨论一下. 示例 去除特定字符 目标:把2017-01-01.jpg和2018-01- ...

  2. linux下批量改文件名命令,Linux 批量更改文件名命令

    想把一部分文件加上日期序.也就是在文件名称前加上当前的年月日进行输出. 获取日期格式如下 Zianed@ubuntu:~/public_web_sSmO9OUVY1/files/image$ date ...

  3. linux mv命令批量,linux 如何用mv命令批量更改文件名?

    满意答案 单纯的依靠mv命令做不到,需要脚本来实现 编写脚本 rename 如下 #---------------------------------------------- #!/bin/sh l ...

  4. Linux shell利用sed如何批量更改文件名详解

    转载自:http://www.jb51.net/article/124047.htm 示例1:去除特定的字符 目标:将 2017-01-01.jpg.2018-01-01.jpg 改为 2017010 ...

  5. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  6. shell脚本中判断上一个命令是否执行成功

    2018-12-21 shell中使用符号"$?"来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败. 结合if-else语句实现判断上一个命令是否执行成功 示例如 ...

  7. 服务器免密码传输文件,CentOS7,使用 scp 命令, ssh 连接方式,免密码传输文件到远程服务器,免密执行远程服务器上的 shell 脚本...

    如题 如果提示:-bash: scp: command not found, 执行下面的命令安装:1 yum install -y openssh-clients 免密码配置通常用 scp 命令通过 ...

  8. 69:shell脚本介绍 | shell脚本结构 | 执行data命令用法 | shell脚本中变量

    2019独角兽企业重金招聘Python工程师标准>>> 1.shell脚本介绍: shell是一种脚本语言和传统的开发语言相比,会比较简单: shell有自己语法,可以支持逻辑判断. ...

  9. runtime无法执行grep_让你的 Shell 命令执行可视化和告警

    Sampler是一个用于shell命令执行,可视化和告警的工具.其配置使用的是一个简单的YAML文件. 1.为什么我需要它? 你可以直接从终端对任意动态进程进行采样 – 观察数据库中的更改,监控MQ动 ...

最新文章

  1. 比较.ASP.NET中Application,Session,Cookie,ViewState和Cache
  2. 分离Exchange的OWA和Microsoft-Server-Activesync手机访问
  3. 用Canvas画圆环百分比进度条
  4. Java基础---封装继承静态
  5. 安卓电子市场_关于安卓手机发展史你知道多少?原来最早安卓居然不是手机系统!...
  6. 编程语言python入门-【python】编程语言入门经典100例--19
  7. 为 DEV-C++ 生成 libmysql.a 的过程 及 windows下 devc++ c语言访问mysql数据库 环境配置...
  8. 最长递增子序列(LIS longest-increment-subsequence)最长连续递增子序列 最大连续子序列和
  9. scratch课程案例——时钟
  10. 【rqnoj 74】24点
  11. 产品经理校招20道常见面试题:问题拆解与回答思路
  12. android8.0的电池图标,Android 8.0 电池图标 显示分析
  13. 大学计算机基础知识学习计划,大学个人学习计划
  14. 在Textview中获取指定文字位置(兼顾网址链接和emoji表情),并在其附近展示图片
  15. 【JAVA长虹键法】第八式 代理模式(23种设计模式)
  16. 华为摄像头采集自动聚焦崩溃
  17. 约束优化:约束优化的三种序列无约束优化方法
  18. 在ASP.NET 中检测手机浏览器(转)
  19. 军民链智合创:BitCEO.world比特维度全球CEO发展大会@台北HiFi++
  20. 简单的diy固态硬盘

热门文章

  1. Asp学习者完整攻略之三:操作SQL:SQL基础:
  2. 从2元钱到年赚20亿元的传奇经历!相信对你一定会有很大的启发!
  3. 使用XAMPP轻松建站(上)
  4. ST众泰:未与长城汽车签署过任何战略协议
  5. 官方揭晓iQOO 9正反面宣传照:挖孔直屏+巨型三摄相机模组
  6. 新的“钉子户”来了!一加9RT将于10月13日正式亮相
  7. 贾跃亭旗下FF公司遭做空 美国机构质疑其造车能力:卖不出一辆FF91
  8. 江苏通报“中通宠物盲盒”事件:已立案调查
  9. 微信支付分使用用户数超2.4亿 每日使用笔数达千万级
  10. 疑似全新华为Mate X2折叠屏手机入网:麒麟9000重磅加持