当前位置: 首页 > news >正文

Vim脚本语言入门:打造你的编辑器

简介

Vim脚本语言是Vim编辑器内置的一种脚本语言,它赋予用户高度的定制和自动化编辑任务的能力。通过编写Vim脚本,用户可以根据自己的需求来扩展和改进Vim编辑器的功能,从而提高编辑效率和舒适度。

在Vim中,脚本语言被广泛用于创建自定义命令、自动化编辑任务、以及实现各种编辑器功能的定制。通过编写Vim脚本,用户可以将编辑器转变成适合自己工作流程的理想工具。

Vim脚本语言与Vim配置密切相关,它允许用户通过编写脚本来配置编辑器的各种行为和功能。因此,熟练掌握Vim脚本语言不仅可以提升编辑器的功能,还可以让用户更好地适应和掌控Vim编辑器的各种特性和功能。

在本篇博客中,我们将深入探讨Vim脚本语言的基础语法、执行方式、实用示例以及调试技巧,帮助读者快速入门并掌握Vim脚本编程的基本技能。

环境准备

安装Vim

在开始学习Vim脚本语言之前,首先需要确保在你的计算机上安装了Vim编辑器。Vim是跨平台的,可以在多种操作系统上运行,包括Linux、Windows和macOS。你可以通过以下步骤来安装Vim:

  • Linux: 大多数Linux发行版都提供了Vim的软件包。你可以使用包管理器(如apt、yum、或者dnf)来安装Vim。例如,在Ubuntu上,你可以运行sudo apt install vim来安装Vim。

  • Windows: 在Windows上安装Vim最简单的方式是通过官方网站下载预编译的安装程序。你可以在Vim官方网站上找到适用于Windows的安装程序,并按照安装向导进行安装。

  • macOS: 你可以使用Homebrew来安装Vim。在终端中运行brew install vim即可完成安装。

安装完成后,你可以在终端(Linux和macOS)或者命令提示符(Windows)中输入vim --version来验证Vim是否成功安装。

打开和编辑Vim脚本文件

一旦Vim安装完成,你就可以开始编辑Vim脚本文件了。Vim脚本文件通常以.vim作为文件扩展名。你可以使用Vim编辑器本身来编辑这些文件,也可以使用其他文本编辑器。

  • 使用Vim编辑器: 在终端中输入vim filename.vim即可打开一个Vim脚本文件。在Vim编辑器中,你可以使用各种命令和快捷键来编辑文件内容。

  • 使用其他文本编辑器: 如果你更倾向于使用其他文本编辑器来编辑Vim脚本文件,也完全可以。只需确保你选择的编辑器能够保存纯文本文件,并且能够保存为UTF-8编码。

无论你选择使用哪种编辑器,都可以开始编写和编辑Vim脚本文件,并且探索Vim脚本语言的各种特性和功能。

基础语法

注释

在Vim脚本中,注释用于向代码添加说明性的文字,以便于理解和维护代码。Vim脚本支持两种注释方式:

" 这是单行注释,在行首添加双引号
" 这是多行注释,使用了连续的单行注释
" 这个例子展示了如何编写多行注释

变量和值

变量的声明和赋值

在Vim脚本中,可以通过以下方式声明和赋值变量:

let variable_name = value

其中variable_name是变量名,value是变量的值。Vim脚本是动态类型的,不需要显式声明变量的类型。

数据类型

Vim脚本支持以下基本数据类型:

  • 字符串:使用单引号或双引号表示,如 'hello'"world"
  • 数字:整数或浮点数,如 423.14
  • 列表:用方括号括起来的一系列值,如 [1, 2, 3]
  • 字典:用大括号括起来的键值对,如 {'name': 'Alice', 'age': 30}

控制结构

条件判断

Vim脚本中的条件判断语句使用ifelseendif关键字:

if condition" 条件为真时执行的代码
elseif another_condition" 另一个条件为真时执行的代码
else" 所有条件都不满足时执行的代码
endif
循环结构

Vim脚本支持forwhile循环:

for variable in range" 循环体
endfor
while condition" 循环体
endwhile

函数

定义函数

在Vim脚本中定义函数使用function关键字:

function MyFunction(argument1, argument2)" 函数体
endfunction
调用函数

调用函数时直接使用函数名加上参数列表:

call MyFunction(value1, value2)
函数参数和返回值

Vim脚本中的函数可以接受参数,并且可以通过return语句返回值:

function Add(a, b)return a + b
endfunction

调用该函数并获取返回值:

let result = Add(3, 5)

通过这些基础语法,你可以编写出简单到复杂的Vim脚本,实现各种编辑器的自定义功能。

Vim脚本的执行

命令行模式执行

在Vim中,可以直接在命令行模式下执行Vim脚本。使用以下命令可以执行脚本:

:source filename.vim

其中,filename.vim是要执行的Vim脚本文件的路径。执行该命令后,Vim会读取并执行该脚本文件中的代码。

自动命令

Vim脚本可以通过设置自动命令来在特定事件发生时自动执行相应的操作。自动命令可以在Vim启动时执行、文件读取或保存时执行、光标位置改变时执行等。

例如,以下命令会在Vim启动时执行MyScript.vim脚本:

autocmd VimEnter * source MyScript.vim

映射键位

通过映射键位,可以将Vim命令或者自定义函数与按键绑定,从而实现快捷操作。Vim脚本中的映射键位可以在脚本文件中设置,也可以直接在Vim的命令行模式下临时设置。

" 在脚本文件中设置键位映射
nnoremap <F5> :call MyFunction()<CR>" 在命令行模式下设置临时键位映射
:nnoremap <F5> :call MyFunction()<CR>

这样,在按下 <F5> 键时,就会执行 MyFunction() 函数。

通过命令行模式的执行、自动命令以及键位映射,可以让Vim脚本在不同的场景下自动执行相应的操作,从而实现更加智能和高效的编辑器功能定制和自动化。

实用示例

编写一个简单的Vim脚本

假设你希望在打开文件时自动设置一些编辑器选项,比如设置缩进、开启行号等。你可以编写一个简单的Vim脚本来实现这个功能:

" 在文件顶部设置缩进为4个空格
set expandtab
set shiftwidth=4
set tabstop=4" 开启行号
set number

将以上代码保存为一个脚本文件(比如 setup.vim),然后在Vim中执行:

:source setup.vim

这样,每次打开文件时,Vim都会自动执行该脚本,设置好相应的编辑器选项。

自动化常见编辑任务

假设你经常需要将文本中的所有单词转换为小写,并且将特定字符串替换为另一个字符串。你可以编写一个Vim脚本来自动执行这些任务:

" 将文本中所有单词转换为小写
:%s/\w\+/\=tolower(submatch(0))/g" 将 "foo" 替换为 "bar"
:%s/foo/bar/g

将以上代码保存为一个脚本文件(比如 tasks.vim),然后在Vim中执行:

:source tasks.vim

这样,你就可以轻松地完成这些编辑任务了。

创建自定义命令

假设你经常需要查找文本中的特定模式,并进行一些处理。你可以编写一个自定义命令来简化这个过程:

command! -nargs=1 MySearch :%s/<args>/replacement/g

将以上代码保存到一个脚本文件(比如 custom_commands.vim),然后在Vim中执行:

:source custom_commands.vim

现在,你可以在Vim中使用 :MySearch pattern 命令来查找并替换文本中的特定模式了。

调试和错误处理

Vim脚本的调试方法

  1. 打印调试信息: 在脚本中使用echom命令打印调试信息到命令行,例如:

    echom "Debug message: " . variable_name
    
  2. 使用调试工具: 一些插件和工具如Vim-Debug、Vim-Profile可以帮助你更高效地调试Vim脚本。

  3. 分步调试: 将脚本分成小块,在每一块的末尾添加echo语句,逐步验证脚本的正确性。

  4. 使用Vim的-V参数: 使用Vim的-V参数可以启用详细的日志记录,帮助你追踪脚本的执行过程。

错误处理机制

  1. 异常捕获: 使用try...catch语句捕获异常,防止脚本因错误而中断:

    try" 可能会发生错误的代码
    catchechom "An error occurred: " . v:exception
    endtry
    
  2. 合理使用silent命令: 在执行可能出现错误的命令时,使用silent命令可以抑制错误信息的输出,提高用户体验。

  3. 日志记录: 在脚本中添加日志记录功能,将脚本执行过程中的关键信息记录到日志文件中,有助于后续排查错误。

  4. 详细的错误信息: 当出现错误时,Vim会提供详细的错误信息,包括文件名、行号和错误信息,有助于快速定位问题所在。

通过这些调试和错误处理的方法,你可以更加高效地开发和调试Vim脚本,确保脚本的稳定性和可靠性。

高级主题

缓冲区、窗口和标签页

  • 缓冲区(Buffer): 在Vim中,每个打开的文件都会被加载到一个缓冲区中。Vim允许同时在多个缓冲区之间切换,执行各种编辑操作。

  • 窗口(Window): 窗口是Vim界面中用于显示缓冲区内容的部分。Vim支持分割窗口,并且可以在不同的窗口中同时编辑不同的缓冲区。

  • 标签页(Tab Page): 标签页是用于组织窗口的一种方式。每个标签页可以包含多个窗口,使得用户可以方便地在不同的文件之间切换。

文本操作

  • 文本搜索和替换: Vim提供了强大的文本搜索和替换功能,可以根据模式匹配和正则表达式来查找和替换文本。

  • 文本编辑命令: Vim支持丰富的文本编辑命令,包括移动光标、复制粘贴、删除、插入等,可以高效地进行文本编辑操作。

  • 文本对象操作: Vim支持文本对象操作,例如操作单词、句子、段落等,使得编辑更加精确和高效。

Vim脚本的异步执行

  • 异步任务和作业: Vim 8及以上版本支持异步任务和作业,允许在后台执行任务而不阻塞Vim的主线程。

  • 使用jobstart函数: 可以使用jobstart()函数启动一个异步任务,并在后台执行。这使得Vim可以执行一些耗时操作而不会导致界面卡顿。

  • 异步回调函数: 异步任务执行完成后,可以通过设置回调函数来处理结果,从而实现更复杂的异步操作逻辑。

通过理解和掌握这些高级主题,你可以进一步提升Vim编辑器的功能和效率,更好地适应各种编辑和编程任务的需求。

学习资源

官方文档

  • Vim官方文档: Vim自带了详细的文档,可以通过在Vim中执行:help命令来查阅文档。特别是:help usr_41.txt可以查看关于Vim脚本的详细说明。

  • Vim脚本函数列表: 官方文档中提供了Vim脚本语言中的各种函数的说明和用法示例,是学习和掌握Vim脚本的重要参考资料之一。

社区和插件

  • Vim社区: 在Vim的用户社区中,你可以找到各种关于Vim脚本的讨论、教程、以及经验分享。在这里你可以与其他Vim用户交流和学习。

  • Vim插件: 有许多优秀的Vim插件可以帮助你更好地编写和管理Vim脚本,比如vim-plug、Vundle.vim等。这些插件提供了各种功能强大的工具和功能,方便你更高效地开发和调试Vim脚本。

推荐书籍和教程

  • 《Learn Vimscript the Hard Way》: 这本书是学习Vim脚本的经典教程之一,通过实际项目和练习,帮助你深入理解Vim脚本语言的各种特性和用法。

  • Vimcasts: Vimcasts是一个在线视频教程网站,提供了大量关于Vim的教程视频,包括Vim脚本的教学内容,适合不同水平的用户学习和参考。

  • 《Practical Vim》: 虽然这本书主要是关于Vim的使用技巧和实用技术,但它也涵盖了一些Vim脚本的内容,对于想要深入学习Vim的用户也是一个不错的选择。

通过这些学习资源,你可以系统地学习和掌握Vim脚本语言,从而更好地定制和优化你的Vim编辑环境,提高编辑效率和工作流程。

结语

通过本文的介绍,你已经了解了Vim脚本语言的基础知识以及如何利用它来定制和优化你的Vim编辑器环境。Vim脚本语言的强大功能和灵活性使得你能够根据个人需求和喜好定制出独一无二的编辑器体验。

无论是简单的编辑任务自动化,还是复杂的插件开发,Vim脚本都能帮助你实现。但要成为一名Vim脚本的高手,需要不断地实践和深入学习。建议你多阅读官方文档、参与社区讨论、尝试不同的插件和技术,不断提升自己的Vim脚本编程水平。

希望你能够充分利用Vim脚本语言,打造出一个高效、个性化的Vim编辑器,让编辑工作变得更加愉快和高效!

相关文章:

Vim脚本语言入门:打造你的编辑器

简介 Vim脚本语言是Vim编辑器内置的一种脚本语言&#xff0c;它赋予用户高度的定制和自动化编辑任务的能力。通过编写Vim脚本&#xff0c;用户可以根据自己的需求来扩展和改进Vim编辑器的功能&#xff0c;从而提高编辑效率和舒适度。 在Vim中&#xff0c;脚本语言被广泛用于创…...

myweb项目资料集

项目要求 前后端分离后端采用 flask 框架前端采用 vue3 框架 后端部分 Flask 3 框架&#xff1a; https://dormousehole.readthedocs.io/en/latest/quickstart.html Session&#xff1a; https://blog.csdn.net/zhangvalue/article/details/93892241 MySQL 操作&#xf…...

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes&#xff08;k8s&#xff09;&#xff1a;部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…...

为什么建议你学习Spring底层原理?

1.根因 Java诞生以来&#xff0c;一直是业界的主流语言和平台&#xff0c;而Spring则是Java开发的平台。与其说是用Java编程&#xff0c;不如说是在Spring框架上编程。即便最近几年比较火的Spring Boot、Spring Cloud&#xff0c;其底层内核仍然是Spring。因此&#xff0c;作为…...

post请求搜索功能爬虫

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>…...

#pragma once的作用

使用visual studio新建头文件时&#xff0c;第一行会出现如下默认代码&#xff0c; #pragma once 它是一种编译器指令&#xff0c;通常用于确保头文件只被包含一次&#xff0c;以避免产生重复定义的问题。当编译器处理一个源文件时&#xff0c;遇到#pragma once指令时&#xf…...

【Android】图解View的工作流程原理

文章目录 入口DecorView如何加载到Window中MeasureSpec MeasureView的测量ViewGroup的测量 LayoutView的layout() Draw1、绘制背景3、绘制View内容4、绘制子View6、绘制装饰 入口 DecorView如何加载到Window中 MeasureSpec 该类是View的内部类&#xff0c;封装View的规格尺寸…...

记工时流程

记工时流程 加入团体 加入观古鉴古服务队 登录成功后&#xff0c;点击我的-我的成员 添加成员 进入小程序 扫描后登录&#xff0c;我的-我的团体&#xff0c;可以看到观古鉴古服务队&#xff0c; 进入后点项目 选择观古鉴古文化志愿者招募 -> 我要报名 -> 选择文化志…...

Ubuntu20.04使用Neo4j导入CSV数据可视化知识图谱

1.安装JDK&#xff08; Ubuntu20.04 JDK11&#xff09; sudo apt-get install openjdk-11-jdk -y java -version which java ls -l /usr/bin/java ls -l /etc/alternatives/java ls -l /usr/lib/jvm/java-11-openjdk-amd64/bin/java确认安装路径为/usr/lib/jvm/java-11-openjd…...

vue-cli打包 nodejs内存溢出 vue2.x Last few GCs

遇到这种情况百度各种博客&#xff0c;什么改package.json里的配置&#xff0c;什么安装increase-memory-limit &#xff0c;都尝试了并没什么用处&#xff0c;最后解决方案为执行下方名单&#xff0c;再次打包就成功了&#xff1a; export NODE_OPTIONS--max_old_space_size4…...

SpringBoot整合Flowable/Activiti

SpringBoot版本: 2.0.1.RELEASE Flowable版本: 6.3.1 Activiti版本: 6.0.0 一.添加pom依赖 因为之前我整合的时候有报错关于sqlsession的错误,后面查询文章才发现flowable要排除掉mybatis,又没说具体排除哪一个,所以我这干脆全部排除了 <!-- Flowable dependencies -->…...

基础总结篇:Activity生命周期

private int param 1; //Activity创建时被调用 Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.i(TAG, “onCreate called.”); setContentView(R.layout.lifecycle); Button btn (Button) findViewById(R.id.…...

【鸿蒙 HarmonyOS】@ohos.promptAction (弹窗)

一、背景 创建并显示文本提示框、对话框和操作菜单。 文档地址&#x1f449;&#xff1a;文档中心 说明 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 该模块不支持在UIAbility的文件声明处使用&#xff0c;即…...

ElasticSearch的常用数据类型

常见的数据类型 Text类型&#xff08;文本数据类型&#xff09; 用于全文检索的字段&#xff0c;例如电子邮件的正文或产品的描述。这些字段是analyzed&#xff0c;也就是说&#xff0c;它们通过分析器传递&#xff0c;以便 在被索引之前将字符串转换为单个术语的列表。通过分…...

C/C++预处理过程

目录 前言&#xff1a; 1. 预定义符号 2. #define定义常量 3. #define定义宏 4. 带有副作用的宏参数 5. 宏替换的规则 6. 宏和函数的对比 7. #和## 8. 命名约定 9. #undef 10. 命令行定义 11. 条件编译 12. 头文件的包含 13. 其他预处理指令 总结&#x…...

客服电话系统:专业、便捷的服务沟通桥梁

一、引言 1.客服电话系统在现代服务中的重要性 在信息化时代&#xff0c;服务行业的竞争日益激烈&#xff0c;提供高效、便捷的服务成为企业赢得市场、获取用户信任的关键。客服电话系统作为企业与用户之间的重要沟通桥梁&#xff0c;不仅承载着解答疑问、处理问题的职责&…...

IP地址与子网掩码

1 IP地址 1.1 IPv4与IPv6 1.2 IPv4地址详解 IPv4地址分4段&#xff0c;每段8位&#xff0c;共32位二进制数组成。 1.2.1 地址分类 这32位又被分为网络号和主机号两部分&#xff0c;根据网络号占用位数的不同&#xff0c;又可分为以下几类&#xff1a; A类地址&#xff1a;…...

Python爬取公众号封面图(零基础也能看懂)

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…...

2024.4.6学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p315-p328 动态绑定机制 当调用方法对象的时候&#xff0c;该方法会和该对象的内存地址/运行类型绑定 当调用对象属性时&#xff0c;没有动态绑定机制&#xff0c;哪里声明&#xff0c;哪里使用 …...

2024年华为OD机试真题-查找一个有向网络的头节点和尾节点-Java-OD统一考试(C卷)

题目描述: 给定一个有向图,图中可能包含有环,图使用二维矩阵表示,每一行的第一列表示起始节点,第二列表示终止节点,如[0, 1]表示从0到1的路径。每个节点用正整数表示。求这个数据的首节点与尾节点,题目给的用例会是一个首节点,但可能存在多个尾节点。同时,图中可能含有…...

【Django开发】0到1美多商城项目md教程第5篇:短信验证码,1. 避免频繁发送短信验证码逻辑分析【附代码文档】

美多商城完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;欢迎来到美多商城&#xff01;&#xff0c;项目准备。展示用户注册页面&#xff0c;创建用户模块子应用。用户注册业务实现&#xff0c;用户注册前端逻辑。图形验证码&#xff0c;图形验证码接口设…...

云原生:应用敏捷,华为视角下的应用现代化

Gartner 也提出&#xff0c;到 2023 年&#xff0c;新应用新服务的数量将达到 5 亿&#xff0c;也即是说&#xff1a;“每个企业都正在成为软件企业”。据IDC 预测&#xff0c;到 2025 年三分之二的企业将成为多产的“软件企业”&#xff0c;每天都会发布软件版本。越来越多的企…...

【测试篇】接口测试

接口测试&#xff0c;可以用可视化工具 postman。 如何做接口测试&#xff1f;&#xff1f; 我们可以先在浏览器中随机进入一个网页&#xff0c;打开开发者工具&#xff08;F12&#xff09;。 随便找一个接口Copy–>Copy as cURL(bash) 打开postman 复制地址 进行发送。 …...

突破校园网限速:使用 iKuai 多拨分流负载均衡 + Clash 代理(内网带宽限制通用)

文章目录 1. 简介2. iKuai 部署2.1 安装 VMware2.2 安装 iKuai(1) 下载固件(2) 安装 iKuai 虚拟机(3) 配置 iKuai 虚拟机(4) 配置 iKuai(5) 配置多拨分流 2.3 测试速度 3. Clash 部署(1) 配置磁盘分区(2) 安装 Docker(3) 安装 Clash(4) 设置代理 4. 热点&#xff1a;一起瓜分互…...

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的机制&#xff0c;将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中&#xff0c;工厂设计模式主要有三种形式&#xff1a;简单工厂…...

百度文心大模型推理成本降至1% / 马斯克起诉OpenAI |魔法半周报

我有魔法✨为你劈开信息大海❗ 高效获取AIGC的热门事件&#x1f525;&#xff0c;更新AIGC的最新动态&#xff0c;生成相应的魔法简报&#xff0c;节省阅读时间&#x1f47b; &#x1f525;资讯预览 百度文心大模型推理成本降至1%&#xff0c;与三星、荣耀等企业达成合作 马斯…...

Struts2的入门:新建项目——》导入jar包——》jsp,action,struts.xml,web.xml——》在项目运行

文章目录 配置环境tomcat 新建项目导入jar包新建jsp界面新建action类新建struts.xml,用来配置action文件配置Struts2的核心过滤器&#xff1a;web.xml 启动测试给一个返回界面在struts.xml中配置以实现页面的跳转&#xff1a;result再写个success.jsp最后在项目运行 配置环境 …...

git 标签功能操作以及回退

Git 标签功能允许开发者为特定的提交打上标签&#xff0c;以便后续能够方便地引用这些提交。标签通常用于标记重要的版本或里程碑&#xff0c;例如软件发布的版本号。与分支不同&#xff0c;标签指向的是固定的提交&#xff0c;一旦设置&#xff0c;就不能轻易更改。下面是一些…...

利用python实现文字转语音

代码如下&#xff1a; import pathlib import tkinter as tk import tkinter.ttk as ttk import tkinter.filedialog as filedialog import tkinter.messagebox as msgbox import pyttsx3class Application(tk.Tk):def __init__(self):super().__init__()self.title("文本…...

拾光坞N3 ARM 虚拟主机 i茅台项目

拾光坞N3 在Dcoker部署i茅台案例 OS&#xff1a;Ubuntu 22.04.1 LTS aarch64 cpu&#xff1a;RK3566 ram&#xff1a;2G 部署流程——》mysql——》java8——》redis——》nginx mysql # 依赖 apt update apt install -y net-tools apt install -y libaio* # 下载mysql wg…...

贵州遵义企业公司网站建设/百度关键词排名软件

引子 标题字面意思 流程 1.github下载包 https://github.com/alibaba/nacos/releases 基本选择最新的就可以。 按照需求下载。 接下来以windows进行示范 2.解压 解压后的文件目录如下&#xff1a; bin&#xff1a;启动文件conf&#xff1a;配置文件target&#xff1…...

深圳企业网站模板/线上营销手段有哪些

双网叠加前提设置什么是跃点数设置思路设置步骤结语其他方法前提 网络带宽叠加的前提是&#xff1a; 两个&#xff08;及以上&#xff09;宽带账号两个&#xff08;及以上&#xff09;网卡&#xff0c;有线或无线都可以两个&#xff08;及以上&#xff09;路由器&#xff0c;…...

如何做网站讯息/百度站长快速收录

∇H ∂D∂D∂t ∂D∂D∂t J...

外贸网站产品分析/打开百度官网

AS3中新的XML处理方法&#xff1a;E4X&#xff0c;直到现在&#xff0c;ECMA脚本语言规范&#xff08;ECMA-262&#xff09;&#xff0d;&#xff0d;AscriptScript 3.0的核心基础&#xff0c;并没有提供任何的XML数据处理类或方法。AcriontScript之前的版本&#xff08;从Flas…...

如何自学建网站/国际军事新闻

http://blog.sina.com.cn/s/blog_533074eb01015zv1.html 一般说来&#xff0c;数据链路层发出的数据包称为frame&#xff0c;地址是链路层的地址&#xff0c;如mac地址&#xff1b;网络层发出的数据包称为packet&#xff0c;地址是网络层地址&#xff0c;如ip地址&#xff1b…...

免费 网站建设/网站优化服务

presentation: opencv中常见的二值化操作&#xff0c;当然&#xff0c;不同图片你要去调参&#xff0c;不同的二值化处理效果不同&#xff0c;可以根据特定场景二值化后的效果选取想要的二值化操作。 import cv2 import numpy as np from matplotlib import pyplot as plt imp…...