Lexsion 发布的文章

向Outlook用户发送邮件收到错误码550_5_7_1处理思路

我向Outlook用户发送邮件,遭到退信,错误码550 5.7.1。收到的详细错误信息如下:

Diagnostic-Code: smtp; 550 5.7.1 Unfortunately, messages from [77.88.28.105] weren't sent. Please contact your Internet service provider since part of their network is on our block list (S3150). You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors.
[VE1EUR01FT034.eop-EUR01.prod.protection.outlook.com]


阅读微软疑难解答链接

  • 微软会随退信附上错误信息,其中包含了一些信息。通过阅读微软给出的链接中描述的内容,了解其对电子邮件的策略,排查自己的发件服务是否违反了某些策略。

  • 如果自己的服务有违反策略,需要先优化服务,避免后期再次违反。

尝试使用除名门户

检查是否被SPAMHAUS封禁

  • 通过访问SPAMHAUS-IP AND DOMAIN REPUTATION CHECKER检查自己的域名和发件服务器的IP地址是否被封禁。网友说如果有被封禁,可以按照网站的提示尝试解封?

  • 域名是自己发送邮件时使用的域名,即发件邮箱地址 @ 后面的内容。

  • 如果发件服务器是托管给服务商的,发件服务器的IP地址也会由服务商提供。该地址可以在退信的错误信息中看到。

  • 如果发现是服务商IP问题,且该IP是共享。可考虑联系服务商处理。

  • 如果发现是自己域名问题,需自查域名被封禁的原因。

检查SPF记录

SPF(Sender Policy Framework)记录是为了防范垃圾邮件而提出来的一种DNS记录类型,它是一种TXT类型的记录,它用于登记某个域名拥有的用来外发邮件的所有IP地址。

按照SPF的格式在DNS记录中增加一条TXT类型的记录,将提高该域名的信誉度,同时可以防止垃圾邮件伪造该域的发件人发送垃圾邮件。正确配置SPF记录可降低来自您域中某个地址的电子邮件最终进入收件人垃圾邮件文件夹的风险。

如何检查SPF记录

可以通过Open-SPF提供的工具对SPF进行检查,以下是自行检查方式。

使用 nslookup 命令可以查看。方法如下:

C:\Users\XXX>nslookup
> server 223.5.5.5
> set type=txt
# 列如QQ邮箱是XXXXXXXX@qq.com
> qq.com

得到如下回显信息:

服务器:  [223.5.5.5]
Address:  223.5.5.5

非权威应答:
qq.com  text =

        "v=spf1 include:spf.mail.qq.com -all"

如果我们继续深究,就会得到更加复杂的结果,如果查询到底,我们便会查到很多用于发件服务的IP。

> spf.mail.qq.com
服务器:  [223.5.5.5]
Address:  223.5.5.5

非权威应答:
spf.mail.qq.com text =

        "v=spf1 include:spf-a.mail.qq.com include:spf-b.mail.qq.com include:spf-c.mail.qq.com include:spf-d.mail.qq.com include:spf-e.mail.qq.com include:spf-f.mail.qq.com include:spf-g.mail.qq.com -all"

判断SPF是否异常

  • 通过上面的查询,我们可以得到很多IP地址,如果我们的服务器IP在这些IP中,说明SPF设置没有问题。

  • 上面查询得到的IP可能会存在类似于 ip4:77.88.0.0/18 的地址范围。通过计算可得子网掩码为 255.255.192.0 ,IP范围为 77.88.0.1 ~ 77.88.63.254

添加SPF条目

如果发件IP信息不在SPF策略中,那便需要进行添加。这个操作需要在域名服务商面板中进行,方法是在DNS中为域名添加一条TXT记录。

比如,我的邮件服务是邮件服务商提供。服务商Yandex也提供了相关的范本。为域名添加一条内容为 v=spf1 redirect=_spf.yandex.net 的TXT记录即可。

如果还需要从非服务商提供的服务器发送邮件,则使用以下格式添加其他服务器:

v=spf1 ip4:IP-1 ip4:IP-2 ip4:IP-3 include:_spf.yandex.net ~all

其中的IP-1、IP-2、和IP-3替换成服务器的IP地址,没有的话就删掉。

只使用自己的服务器发送邮件的情况,那就只写自己的IP就可以了。

v=spf1 ip4:IP-1 ip4:IP-2 ip4:IP-3 ~all

修改后等待DNS信息生效,然后再次检查问题是否解决。注意,DNS的修改可能需要几分钟到几十个小时的时间才会生效。

联系微软支持

如果以上的排查仍然不能解决,则需要考虑联系微软的支持。请微软的技术支持人员核查故障原因。在这之前可能需要阅读策略、做法和指南

使用此操作将向微软发起支持工单,会有微软技术人员处理并回复。因为是人工处理,处理结果的邮件也不能回复,如果一次没有解决,可能需要多次发起工单。

参考

在树莓派上使用JD-Base 自动薅取京东羊毛

前言:

狗东的活动太丰富了,参与需要耗费大量时间。之前看到大佬们使用脚本代替人力来做这件事,甚至GitHub上还有开源项目。于是我决定跟随大佬脚步,给自己也整一个,部署在树莓派上。经过了解,脚本可以使用docker部署,也可以自己搭建环境。但貌似GitHub上的项目仓库都被封的差不多了,这里考虑用docker。

操作:

安装docker:

使用docker部署项目,自然要先安装docker,听说这个东西很简单,我在官网找到了安装说明,说的是Docker Engine有三种安装方法,分别是从存储仓库安装、从DEB包安装和使用shell脚本安装。而树莓派只支持从脚本安装,貌似没得选呀,我此处也不研究到底有没有的选,就按官方文档来吧。注意,docker的安装一般是需要root权限的。

首先,我们需要卸载旧的版本,执行以下命令,如果回显 none of these packages are installed 说明就可以了。

sudo apt-get remove docker docker-engine docker.io containerd runc

执行以下命令获取安装脚本并运行它,然后等待其自动完成Docker Engine的安装。完成安装后Debian类系统下程序就运行了。

 curl -fsSL https://get.docker.com -o get-docker.sh
 sudo sh get-docker.sh

Tips:

  • 如果以后需要卸载docker,使用以下命令卸载Docker Engine、CLI、和Containerd packages:

    sudo apt-get purge docker-ce docker-ce-cli containerd.io
  • 使用以下命令删除相关的镜像、配置信息、文件等:

     sudo rm -rf /var/lib/docker
     sudo rm -rf /var/lib/containerd

安装Docker Compose:

作者提供了一个 compose.yml 文件,它是 Docker Compose 工具的配置文件。通过此工具可以快速部署、分享docker项目。所以此处我们还需要安装它。如果使用的是Windows或Mac下的桌面版本,那应该已经带有Docker Compose,而Linux需要单独安装。此处我使用的树莓派,不支持直接二进制安装,所以通过pip安装。

运行此命令以安装依赖:

sudo apt install python3-dev python3-pip libffi-dev gcc libc-dev cargo make

通过pip安装 Docker Compose,此时前面的 python3 -m 表示将调用Python3处理,详见参考。

sudo python3 -m pip install docker-compose

Tips:

  • 如果您需要卸载Docker Compose,可运行以下命令使用pip安装的本工具卸载:

    sudo python3 -m pip uninstall docker-compose

部署JD-Base:

首先创建一个空目录,文件名自定,比如我是用的jdauto。然后我们把作者提供的 docker-compose.yaml 放入到之前目录,然后运行以下命令开始构建:

sudo docker-conpose up

部署完成后会看到相关登录信息,比如端口号默认是 5678 ,用户名是 admin ,密码是 adminadmin

确认无误按 Ctrl + X 停止。下次如果想要后台启动,可以使用 -d 选项,这样服务就会以分离模式(detached)运行。

修改配置信息:

JD-Base的服务运行起来后,我们便可以通过IP:5678访问配置页面了,输入用户名和密码登录。

向下滚动,如下所示,找到通知Token处,选择一种通知方式进行设置。

################################## 定义通知TOKEN(选填) ##################################
## 想通过什么渠道收取通知,就填入对应渠道的值
## 1. ServerChan,教程:http://sc.ftqq.com/3.version
export PUSH_KEY=""

## 2. BARK,教程(看BARK_PUSH和BARK_SOUND的说明):https://github.com/RikudouPatrickstar/jd_scripts/blob/master/githubAction.md
—————————略—————————————

回到上面最开始处,设置Cookie,可以看到扫码获取已经无效了,浏览器获取有效期很短。所以使用仓库自带脚本wskey.js来自动更新cookie。

在容器的config目录下的wskey.json文件中填写wskey,wskey需要自行抓包。抓包方式本文不展开,下面会附链接。

以上信息填好后我们需要回到网页的配置设定中,将第一个cookie中随意填入几个字母,否则脚本会因没有cookie不执行。

然后点击手动执行选项卡,在脚本名称处输入 wskey ,然后点击提交,等待其完成执行,然后就可以在配置设定中看到正确的Cookie了。

去Linux shell中使用 sudo docker-compose restart 命令重启docker。如果处于前台运行,使用 Ctrl + C 停止,然后使用 sudo docker-compose up -d 在后台启动。

在后台以分离模式运行时,使用 sudo docker-compose stop 可以停止服务。

此时,我们便完成了整个部署,里面某些任务可能当天不会执行,可以去手动执行里面按需手动运行一下。

参考:

群晖共享下文件名中出现回车符导致Windows无法读写的处理

前言:

笔者的群晖里面存储的一些文档,突然之间发现不能读取了,尝试打开时Windows系统提示找不到路径。经过再三尝试发现,这些文件可以在Linux下正常读写。在热心网友们的帮助下,经过探索,最终发现不知在哪个阶段、何种原因,文档的名称和扩展名之间被添加了一个回车符(ASCII控制字符,代码:CR,十六进制编码:0x0D,)。而包含这种特殊字符的文件名,在Windows系统下是非法的。最终在网友们的帮助下,解决了这个问题。

简单说一下是如何发现这个特殊字符的。经过热心网友(flaribbit)指导,我使用 ls -l > filename.txt 命令将目录下的文件信息输出到一个txt文本中。然后使用WinHex之类的16进制编辑器直接打开,找到扩展名前的一个字节,查看其数值,然后从ASCII码表中查询即得到结果。

处理过程:

群晖系统的shell太过简单,很多命令不支持,所以我们需要先把其挂载到其他系统中。比如,我挂到了运行Raspbian系统的树莓派下。

Linux系统下挂载CIFS (samba)共享:

以下命令中:

  • //Server 是服务器(即群晖)的主机名或IP
  • Remote_Diretory 是服务器(即群晖)共享的目录(文件夹)名称。
  • Local_Directory 是本地的挂载点,本地的一个空目录(文件夹),需要提前创建好。
  • 后面的 usernamepassword 是用于访问共享的用户名和密码。

挂载命令:

mount -t cifs //Server/Remote_Diretory Local_Directory -o username=xxx,password=xxx

所有操作完成后记得卸载,卸载命令:

umount <Local_Directory>

替换文件名中的回车符:

知道了原因,我们处理的方法有很多,可以写shell脚本,可以用Python写个小程序。此处笔者使用了Linux下的一个软件,名叫 rename。这个软件包群晖上没有,所以我将目录挂载到了Raspbian。

如果系统提示找不到rename,使用以下命令获取:

sudo apt install rename

先使用 cd ./Local_Directory/XXX/ 来到文件的目录,使用以下命令轻松将该目录下所有文件的名称中的回车符去掉:

rename -v  's/\r//g' *

这样就完成了,如果没有其他问题,此时在Windows系统下已经可以正常读写这些文件了。

考虑Linux系统下的兼容性,如果您想要将文件名称中存在的空格换成 _ ,可以使用以下命令:

rename -v  's/ /_/g' *

记得卸载文件系统:

umount <Local_Directory>

以上命令可能看起来有点懵,如果没有学过正则表达式的话。此处稍作解释:

  • -v 是 --verbose,用于在终端中打印成功处理的文件名称,让我们看到处理了哪些文件。

  • 's/ /_/g' 正则表示将空格替换成 _ ,可以看到三个斜杠 / 中有两个位置,前面填入的是要匹配的内容,后面填入要改为的内容。如果后面什么都不填(不是空格!),就是将前面要匹配的内容删掉。

  • 像是要匹配回车符这样的控制字符,或是特殊字符,我们需要使用转义字符来处理,即在前面添加反斜杠。如回车符是 \r

如果我们需要将所有的txt文件的后缀名删除,可以使用以下命令:

rename -v  's/\.txt$//' *.txt
  • 正则中 . 前的 \ 是转义字符。

后记:

经过热心网友们的讨论,我们解决了问题。大佬(Sparkle)提供了使用Python实现的代码,笔者没有测试。

import os
for i in os.listdir('.'):
  os.rename(i,i.replace('\r',"))

总结:

遇到问题,我们首先要明白这是个什么问题,如何用简练的文字把问题的现象描述出来。然后在各大搜索引擎中搜索。搜索无果我们回头继续思考,这可能是什么原因?可以借助调试、日志、转储等判断导致问题的原因。最后分析一下,解决问题大致是个什么流程,可以分成哪些步骤,需要学习哪些新的知识,然后一步一步的学习、解决。

记维修搜狗录音笔C1

前言:

之前从老王那里入了两支坏的搜狗录音笔C1,很多大佬上车了。据说这批货是售后出来的,状态良莠不齐。花了一点时间,最终我这两支拼成了一个。本文简述过程,记录部分资料以备日后使用。也顺便试一下用IPFS(星际文件系统)作为图床效果如可。

以上图片大小为3386KB

维修过程:

首先,我对两支录音笔进行了测试。其结果如下:

一号:外观尚可,外壳完整,右侧有些许撬痕。拆机发现严重进液,主板严重腐蚀,通电发现大短路不开机,MIC FPC有腐蚀,后测试发现MIC坏,排线有腐蚀断线。

二号:外观不良,外壳有磕伤,撬痕极其明显,结构变形不佳。电池亏电,充电后可正常开机并连接手机APP,MIC排线有多处弯折与裂痕,LED不亮,MIC变形。

很明显,如此情况只能两支拼一支了。首先将一号机的底壳与二号机的主板电池装在一起,然后将二号MIC排线的接插件替换到一号排线上,再将一号MIC排线上的两个MIC换新、腐蚀断点飞线。这期间我顺便简单跑了一下MIC_FPC的线路。

MIC脚位定义:

MIC内部构造:

FPC连接器脚位:

脚位 功能 脚位 功能
5 LED_VCC 6 LED_R
4 GND 7 LED_G
3 CLOCK 8 LED_B
2 MIC_OUT 9 R/L & VDD
1 GND 10 GND

最终将一号排线与一号中壳、上盖等组装在一起。与底壳主板等简单装配后实际测试录音、转写等功能没有问题。但录音的音质一般,这有可能是我换的MIC质量不好(可能性不大)导致,也可能是产品性能仅限于此了。

使用感受:

正如上文所述,感觉录音的音质一般,这有可能是我换的MIC质量不好。个人拙见,搜狗录音笔C1适合用于会议记录与采访等场景,专业的视频录制收音确实不适合。虽然这笔有两个MIC,但只有降噪用途,其并不能录制双声道立体声。

获取转写功能:

此机器的主要卖点是录音转文字服务,简称转写服务。此功能不是本地完成的,而是将录音文件上传云端处理。搜狗有一个名为 搜狗录音助手 的APP有偿提供此服务,后来我们通过淘宝了解到,搜狗录音笔C1带有终生免费的转写服务权益。

经沟通客服了解到:免费转写服务权益会绑定在第一次绑定录音笔时使用的账号上,此权益可以迁移一次。咱们这种货,肯定不是第一次绑定啦,所以绑定后不会获得终生免费的转写服务权益。根据从客服处了解的信息,咱可以提供机器的SN(SN查看:绑定后在APP左上角点击录音笔图标,SN在出现的录音笔管理页面最下方)和新账号(一般是注册的手机号),然后客服登记后台转移权益。转移后便会获得有效期至2201年的转写服务。

这种事情,我们需要与搜狗客服沟通过程需要一些技巧。不要说自己的机器是售后报废机,可以说是朋友赠送的。至于咱们怎么修的,这个没有必要的情况也不必跟客服讲。客服告知我们的权益转移流程需要提供之前绑定的账号,我们可以告知其朋友说不记得了,一般客服也不会再要求必须提供之前的账号,只要有机器SN和咱的新账号他们就会帮咱处理。

那么,如何与客服取得联系呢?APP里面有啦!搜索添加微信公众号:搜狗AI黑科技。

注:本文图片托管于IPFS(星际文件系统),由CloudFlare IPFS网关提供图片解析,插图可能会随时间久远而丢失!

Windows 10 下免费安装HEVC视频扩展

前言:

今天导出iPhone SE2的原始照片,发现文件后缀是HEIC,然后在Windows系统下使用系统自带的照片应用无法打开,其提示 显示此文件需要HEVC视频扩展 ,后面还有个 立即下载并安装的选项 。那我肯定得装啦,点击立即下载后弹出了Microsoft Store,居然要收费?像我这种人怎么可能心甘情愿付费,于是便研究了一下如何免费得到它。

后来看到网帖说某些预装系统的品牌机会预装一个来自名为 “来自设备制造商的 HEVC 视频扩展” 的插件,而在以前是可以直接在Microsoft Store中搜索到的,目前我搜索了一下发现搜不到了。使用帖子中附带的链接打开后提示需要兑换代码,这个网上也搜不到。

后来,我在收费版扩展下铺天盖地的骂语中找到某热心网友miku说:

明明有免费正版确搜不到,非要B站导向,微软不要太恶心

突然想起,以前在B站的UWP客户端设置中看到过,是有个安装什么扩展的按钮。果然在里面看到了,点击后直接跳到商店,下载就可以了。

更新,找到了能直接安装的链接,不需要“B站导向”了:

浏览器输入以下代码按回车,可以启动Microsoft Store并进入安装页面:

ms-windows-store://pdp/?ProductId=9N4WGH0Z6VHQ

后面不用看啦。。

操作:

  1. 打开Microsoft Store ,搜索并安装 哔哩哔哩动画 ,安装完成后直接点击 启动

  2. 在打开的 哔哩哔哩动画 界面中,点击右下角的齿轮状图标以进入 设置

  3. 在打开的设置窗口中,默认的第一个选项卡下,向下滚动鼠标滚轮。在接近末尾的部分有一个 安装HEVC视频解码扩展 按钮。点击它将自动跳转到Microsoft Store中,进入 来自设备制造商的HEVC视频扩展 安装页面。

  4. 我们可以看到上方有一行字提示 “您可以在本机使用 来自设备制造商的 HEVC视频扩展,或···”,其后有一个安装按钮。点击安装按钮,等待其完成安装。

  5. 此时我们再次使用照片应用打开HEIC格式的照片文件,发现已经可以正常查看了。

  6. 至此,免费的 “来自设备制造商的 HEVC 视频扩展” 便安装成功了,如果您不是B站忠实用户、不喜欢B站的二刺螈环境、也没有融入其中的想法,您便可以去卸载 哔哩哔哩动画 了。

卸载哔哩哔哩动画:

如果您需要使用此应用,请忽略以下内容。

  1. Windows徽标键 ,打开开始菜单,点击左上角第三个图标—— 所有应用

  2. 在其中找到少女粉色的 哔哩哔哩动画 图标,鼠标右击,在右键菜单中点击 卸载

  3. 在确认卸载的提示中点击 卸载 ,完成卸载。

参考:

注:本文图片托管于IPFS(星际文件系统),由CloudFlare IPFS网关提供图片解析,插图可能会随时间久远而丢失!

vi或vim快速指引

前言

之前学习过vim编辑器,这是一款很棒的编辑器,它在很多Linux系统中有提供,使我们可以在shell中编辑文件。然而某些环境下只提供了vi编辑器,而vi编辑器的操作和vim有部分不同,所以我花了点时间将基本操作整理了一下。不要求自己完全掌握这两款工具,只为保证遇到只有vi的环境可以编辑文件。

vi / vim最最最基本的操作流程:使用vi或vim后跟随文件名打开文件,在此时所处的命令模式下通过方向键找到要修改的地方,按shift+x向前删除内容,按a进入插入模式,使用键盘输入要改的内容。输入完成后按ESC回到命令模式,输入 :wq 按回车保存退出,弄烂了不想保存则输入:q! 按回车强行退出。

创建文件:

创建文件是很简单的操作,我们可以使用系统内置的 touch 命令创建一个文件。

touch test.txt

也可以使用vi或vim来创建,如果此处没有这个文件。如果有这个文件的话执行此命令是打开文件。此命令后面的参数可以是相对路径也可以是绝对路径

# vi:
vi test.txt

#vim:
vim test.txt

此命令执行后vi或vim会打开并处于命令模式,想要正式保存退出,可以按 Esc键 确保进入命令模式,然后按 : 进入底行(扩展命令)模式,输入 wq 命令按回车键创建保存退出。

编辑器工作模式:

使用vi和vim编辑器首先要了解工作模式的概念,类似的,它们均提供了常用的三大模式。此处列表对比:

vi vim
命令模式(Command Mode)
打开时默认模式,按Esc进入
用于一般按键命令操作,如快速移动光标、复制删除等。
命令模式(Command Mode):
打开时默认模式,按Esc进入
用于一般按键命令操作,如快速移动光标、复制删除等。
插入模式( INSERT Mode)
命令模式下按 ai 进入
用于文本输入
插入模式( INSERT Mode)
命令模式下按 ai 进入
用于文本输入
末行模式(Last line Mode)
命令模式下按 : 进入
扩展的命令输入,比如保存和退出(wq)。
扩展命令模式(Extended Command Mode)
命令模式下按 : 进入
扩展的命令输入,比如保存和退出(wq)。
vi 无此模式 可视模式(VISUAL Mode)
命令模式下按 v 进入
此模式包含可视内容选择操作。

vi和vim在打开时默认处于命令模式,此模式用于移动光标,定位编辑点,复制删除内容。当我们将光标移动到目标编辑点后,进入插入模式以使用键盘键入内容。若完成某位置内容键入后想要移动光标,则回到命令模式重复操作。若完成编辑需要退出,也是先回到命令模式,然后进入扩展命令模式,输入相关命令退出。命令模式是一切的开始,其他模式都需要从此进入,退出其他模式也将回到命令模式。

vi和vim在工作模式方面操作基本一致,只是vim多了一个可视模式。此功能在我们简单编辑文件时意义不大。以上大致的说明了编辑过程中三大模式该在什么阶段使用。

插入模式:

所谓插入模式就是能够打字输入的模式。使用 i 键进入插入模式,光标保持不动;而使用 a 键进入插入模式将使光标自动后退一位,退出模式时光标会前进一位。顺便一提, 按键 I、A、O 均有进入插入模式的功能,且分别使用大小写键入时效果不同,有兴趣可自行尝试或参阅:vim非完全学习手册

注意:部分环境中的vi(例如处于vi兼容模式下的vim)无法在插入模式下通过方向键移动光标,其表现为按 上下右左 键会出现字符ABCD,这可能与我们常见编辑器的操作不同。此时我们可能需要按 Esc 键回到命令模式才可通过方向键移动光标。以上不难看出,使用 a 键进入插入模式明显更符合大多操作习惯。

注:导致以上问题原因可能有很多,也有不同办法可以处理,如果是vim处于vi兼容模式导致的此问题,可以在扩展命令模式执行set nocp 命令使其退出兼容模式解决。参考链接中提供了一篇相关文档供参考。

命令模式:

vi和vim编辑器打开时默认处于命令模式,vim可能会在左下角标记-- INSERT --以指示插入模式,但vi可能没有。如不在或不确定是否处于命令模式,请按Esc键进入。

注意:vi和vim编辑器命令模式下输入的命令,无论单字符还是组合键,都是大小写敏感的,操作时请注意大小写!

光标的移动:

事实上,简单的编辑并不需要了解太详细的光标移动操作,会使用方向键移动光标也能完成。了解光标移动可以快速定位编辑位置,追求尽快开始使用可以跳过本节。

  1. 使用键盘上的方向键移动光标,但考虑更高效的使用,也可尝试学习vim的命令键:h(左)j(下)k(上)l(右)。
  2. 按键 0 快速跳至当前行首;使用按键 $ 快速跳至当前行末。(注意:$需使用Shift+4实现)
  3. 使用 gg 按键快速跳至首行;使用 G 按键快速跳至末行。(注意前者时按两次g,后者通过Shift+G实现)
  4. 使用 Ctrl+f 向后翻一整页,使用 Ctrl+b 向前翻一整页。(使用键盘上的 Page UpPage Down 也可实现)
  5. 使用 7 G 按键快速跳至第七行;即通过按出 行号后再加大写字母 G (即Shift+G),即可快速跳转至指定一行。
  6. 可以使用 /string 命令从内容中查找关键词;string表示字符串,即输入关键字进行查找;我们可以使用(n/N)在查询到的多个结果中上下移动箭头。我们可以使用 /^string 这种,关键字前加 ^ 符号,指定搜索以此关键字开始的行; 使用/string$ 这种,关键字后加$符号,指定搜索以此关键字结尾的行。

编辑命令:

  1. x 键可删除光标所在字符,按 X 键(大写,即 Shift + x )删除光标前的一个字符。注意,虽然大多版本的 vi 或 vim 中可以直接按 Backspace 键向前删除,但某些环境中的 vi 、或某些版本的 vi 中Backspace是无效的,所以需要牢记标准操作。追求尽快开始使用着本节剩余内容可以跳过。
  2. 使用 dd 剪切光标所在行内容;使用 5dd 剪切光标及以后共5行。此命令常用于删除行。
  3. 使用 yy 复制光标所在行内容,使用 p 键将复制或剪切的内容粘贴(paste)到光标处。
  4. 使用 u 撤销(undo)之前的操作,使用 Ctrl+r 组合键重做(redo)撤销的操作。

退出:

  • 命令模式下,按住Shift键按两次 z 键,即输入 ZZ 即保存并退出。安全考虑,此方法不建议使用,建议使用扩展命令模式下的退出命令。

扩展命令模式:

在命令模式下按 :(即Shift+;) 键进入扩展命令模式。此模式亦有人称其为末行模式或底行模式(可能于命令于末行输入有关)。在扩展命令模式下,输入扩展命令然后按回车键执行命令。如需从此模式回到命令模式,按 Esc 键。

保存与退出:

  1. 在扩展命令模式下,输入w回车可保存文件。
  2. 在扩展命令模式下,输入q回车可退出,但文件有未保存更改时会失败。
  3. 在扩展命令模式下,输入wq回车可保存并退出。
  4. 在扩展命令模式下,输入w!回车可强行保存。
  5. 在扩展命令模式下,输出q!回车可强行退出,不保存退出。
  6. 在扩展命令模式下,输入wq!回车可强行保存并退出。
  7. 在扩展命令模式下,输入x回车可保存并退出,此处x为小写,大写X为添加密码,慎用!

环境配置:

vi/vim编辑器的设置,称之为环境配置。注意某些vi编辑器可能没有此功能。

# 设置显示行号
set nu

# 取消显示行号
set nonu

# 关闭 vi 兼容模式
set nocp

总结:

想要vi和vim都用的好,建议养成以下操作习惯:避免在插入模式使用方向键移动光标,使用 a 键进入插入模式而不是使用 i 键,使用 x 键或 X 键(大写,即 Shift + x )删除字符,而不是使用 Backspace

参考: