当前位置:首页 > 运维 > 正文内容

vim使用bash-support插件打造成shell编辑器

phpmianshi1年前 (2020-11-06)运维42

背景

IDE 就是这样一个软件,它为了最大化程序员生产效率,提供了很多编程所需的设施和组件。 IDE 将所有开发工作集中到一个程序中,使得程序员可以编写、修改、编译、部署以及调试程序。

在这篇文章中,我们会介绍如何通过使用 bash-support vim 插件将 Vim 编辑器安装和配置 为一个编写 Bash 脚本的 IDE。

简介

bash-support 是一个高度定制化的 vim 插件,它允许你插入:文件头、补全语句、注释、函数、以及代码块。它也使你可以进行语法检查、使脚本可执行、一键启动调试器;而完成所有的这些而不需要关闭编辑器。

它使用快捷键(映射),通过有组织地、一致的文件内容编写/插入,使得 bash 脚本编程变得有趣和愉快。

安装配置使用

下载地址:https://www.vim.org/scripts/download_script.php?src_id=24452

在你的主目录创建 .vim 目录,进入该目录并提取 bash-support.zip 内容:

$ mkdir ~/.vim
$ cd .vim
$ unzip ~/Downloads/bash-support.zip

在 .vimrc 文件中激活它

$ vi ~/.vimrc

# filetype plug-in on  #很多介绍写的这一行,实测应该是下面这行,可能跟版本相关
filetype plugin on
set number   # 可选,增加这行以在 vim 中显示行号

为了简化使用,通常使用的结构和特定操作可以分别通过键映射来插入/执行。 ~/.vim/doc/bashsupport.txt 和 ~/.vim/bash-support/doc/bash-hotkeys.pdf 或者 ~/.vim/bash-support/doc/bash-hotkeys.tex 文件中介绍了映射。

重要:

  1. 所有映射(\+字符 组合)都是针对特定文件类型的:为了避免和其它插件的映射冲突,它们只适用于 sh 文件。

  2. 使用键映射的时候打字速度也有关系,引导符 \ 和后面字符的组合要在特定短时间内才能识别出来(很可能少于 3 秒 - 基于假设)。

如何为新脚本自动生成文件头

看下面的示例文件头,为了要在你所有的新脚本中自动创建该文件头,请按照以下步骤操作。

image.png

首先设置你的个人信息(作者名称、作者参考、组织、公司等)

使用映射 \ntw 启动模板设置向导。

$ vi test.sh

此时是插入模式,点击 esc键,进入命令行模式,快速输入 \ntw 弹出如下设置向导

image.png

选中选项 1 设置个性化文件,然后按回车键。之后,再次输入2个回车键。进入如下页面

image.png

此时可以用vim编辑该文件的基本信息,最后保存退出。

打开另一个脚本来测试新的配置。现在文件头中应该有和下面截图类似的你的个人信息:

image.png


常用快捷键


下面是一些用于插入语句的键映射(n – 普通模式, i – 插入模式,v 可视模式):

\sc – case in … esac (n, i)
\sei – elif then (n, i)
\sf – for in do done (n, i, v)
\sfo – for ((…)) do done (n, i, v)
\si – if then fi (n, i, v)
\sie – if then else fi (n, i, v)
\ss – select in do done (n, i, v)
\su – until do done (n, i, v)
\sw – while do done (n, i, v)
\sfu – function (n, i, v)
\se – echo -e "…" (n, i, v)
\sp – printf "…" (n, i, v)
\sa – 数组元素, ${.[.]} (n, i, v) 和其它更多的数组功能。

运行操作键映射的列表:

\rr – 更新文件,运行脚本(n, i)
\ra – 设置脚本命令行参数 (n, i)
\rc – 更新文件,检查语法 (n, i)
\rco – 语法检查选项 (n, i)
\rd – 启动调试器(n, i)
\re – 使脚本可/不可执行(*) (n, i)

编写完脚本后,保存它然后输入 \re 和回车键使它可执行。

参考资料

插件介绍,安装见:https://github.com/vim-scripts/bash-support.vim

插件快捷键见:http://lug.fh-swf.de/vim/vim-bash/bashsupport.html

如何使用:https://linux.cn/article-8467-1.html


版权声明:本文由PHP面试资料网发布,如需转载请注明出处。
分享给朋友:

相关文章

记一次laravel项目因session导致cpu过高的问题

问题起因:腾讯云监控CPU过高报警  10:20-10:28左右持续 百分之80以上。问题排查:1. 查看php-fpm慢日志发现有大量如下日志:[26-May-2020 ...

通俗易懂解释IP段192.168.1.0/24和192.168.0.0/16

192.168.1.0/24 包含哪些IPIP地址格式采用“斜线记法”,即:IP地址/网络前缀。例如 192.168.1.0/24 表示32位的二进制地址中(任何IP的二进制地址都...






TCP(Transmission Control Protocol) 传输控制协议

三次握手

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:

SYN(synchronous建立联机) 同步报文段

ACK(acknowledgement 确认)

PSH(push传送)

FIN(finish结束) 结束报文段

RST(reset重置) 复位报文段

URG(urgent紧急) 紧急指针

Sequence number(顺序号码)

Acknowledge number(确认号码)

客户端TCP状态迁移:

CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

服务器TCP状态迁移:

CLOSED->LISTEN->SYN收到->ESTABLISHED->CLOSE_WAIT->LAST_ACK->CLOSED


各个状态的意义如下: 

LISTEN - 侦听来自远方TCP端口的连接请求; 

SYN-SENT -在发送连接请求后等待匹配的连接请求; 

SYN-RECEIVED - 在收到和发送一个连接请求后等待对连接请求的确认; 

ESTABLISHED- 代表一个打开的连接,数据可以传送给用户; 

FIN-WAIT-1 - 等待远程TCP的连接中断请求,或先前的连接中断请求的确认;

FIN-WAIT-2 - 从远程TCP等待连接中断请求; 

CLOSE-WAIT - 等待从本地用户发来的连接中断请求; 

CLOSING -等待远程TCP对连接中断的确认; 

LAST-ACK - 等待原来发向远程TCP的连接中断请求的确认; 

TIME-WAIT -等待足够的时间以确保远程TCP接收到连接中断请求的确认; 

CLOSED - 没有任何连接状态;


TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

确认号:其数值等于发送方的发送序号 +1(即接收方期望接收的下一个序列号)。

图1 TCP三次握手建立连接  


TCP协议中的三次握手和四次挥手

理解:窗口和滑动窗口TCP的流量控制TCP使用窗口机制进行流量控制什么是窗口?连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端接收方发送的确认信息中包含了自己剩余的缓冲区...

DNS原理什么叫域名劫持和域名欺骗/域名污染

给大家扫盲一下 DNS 的常识。既然是扫盲 DNS,也顺带说说“域名劫持”和“域名污染”这两个很容易混淆的概念。提醒一下:这两者的其中之一是 GFW 的大杀器,爱翻墙的同学有必要了解。DNS 是啥?D...

linux中netstat和ss命令详解

由于nio的普及,ck10k的问题已经成为过去式。现在随便一台服务器,都可以支持数十万级别的连接了。那么10万的连接需要多少资源呢?由于一个连接都是文件句柄,所以需要文件描述符数量支持才行,每一个so...

linux中nf_conntrack table full dropping packet问题处理

概述:在日常的服务器运维过程中,发现某段时间 /var/log/messages日志报错nf_conntrack:table full,drop packet简介:nf_connt...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。