【Linux】vim详解

news2024/9/24 17:16:58

1.什么是vi/vim?

        简单来说,vi是老式的文本编辑器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连 vim的官方网站( http://www.vim.org)自己也说vim是一个程序开发工具而不是文本处理软件。

        Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

        vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。

2.为何要学vi/vim?

其实是有原因的,因为:

  • 很多软件的编辑接口都会主动调用vi(例如crontab、visudo、edquota等命令);
  • 所有的UNIX-like系统都会内置vi文本编辑器,其他的文本编辑器则不一定会存在;
  • vim 具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计;
  • 因为程序简单,编辑速度相当快速;

其实重点是上述的第二点,因为有太多Linux上面的命令都默认使用vi作为数据编辑的接口,所以你一定要学会Vi,否则很多命令你根本就无法操作。

3.vim的使用

由于啊这个vi和vim的用法基本一样,我们就讲一样就行了

基本上vim共分为3种模式,分别是一般命令模式、编辑模式与命令行模式。

这3种模式的作用分别是:

  • 一般命令模式(command mode)

以vi打开一个文件就直接进入一般命令模式了(这是默认的模式,也简称为一般模式)。

        在这个模式中,你可以使用【上下左右】按键来移动光标,你可以使用【删除字符】或【删除整行】来处理文件内容,也可以使用【复制、粘贴】来处理你的文件内容。

  • 编辑模式/插入模式(insert mode)

在一般命令模式中可以进行删除、复制、粘贴等的操作,但是却无法编辑文件的内容。要等到你按下【i、I(大写i)、o、O(大写o)、a、A、R】等任何一个字母之后才会进入编辑模式。

        注意了,通常在Linux中,按下【i、I(大写i)、o、O(大写o)、a、A】时,在界面的左下方会出现【INSERT】,按下【R】时会出现【REPLACE】的字样,此时才可以进行编辑,

而如果要回到一般命令模式时,则必须要按下【Esc】这个按键即可退出编辑模式。

  • 命令行模式/底行模式(command-line mode)

在一般模式当中,输入【:  /  ?】三个中的任何一个按钮,就可以将光标移动到最下面那一行。

        在这个模式当中,可以提供你【查找数据】的操作,而读取、保存、批量替换字符、退出vi、显示行号等的操作则是在此模式中完成。

简单地说,我们可以将这3个模式想成下面的图例来表示:


注意到上面的图例,你会发现一般命令模式可与编辑模式及命令行模式切换但编辑模式与命令行模式之间不可互相切换,这非常重要。

闲话不多说,我们下面以一个简单的例子来进行说明吧!

3.1.简易执行范例

如果你想要使用vim来建立一个名为welcome.txt的文件时,你可以这样做:

  • 1.使用【vim filename】进入一般命令模式



直接输入【vim文件名】就能够进入vi的一般命令模式。另外,请注意,记得vim后面一定要加文件名,不管该文件名存在与否。没有的话vim会自己创建一个新文件

进去之后底行就会出现下面这些字样

整个界面主要分为两部分,上半部分与最下面一行两者可以视为独立的。上半部分显示的是文件的实际内容,最下面一行则是状态显示行(图所示的[New File]信息),或是命令执行行。

我们使用vim打开一个新文件

如果使用vim打开的文件是已经存在的文件,则可能会出现如下的信息:

如图所示,

  1. 底行的那个【"/etc/man_db.conf"[readonly] 131L,5165c】代表的是现在打开的文件名为/etc/man_db.conf,由于打开者的身份缘故,目前文件为只读状态,且文件内有131行以及具有5165个字符的意思。
  2. 右边那个1,1的意思是光标目前处于第一行的第一个字符
  3. Top代表目前这个页面是在整个文件的最顶端

那一行的内容并不是在文件内,而是 vim 显示一些信息的地方,此时是在一般命令模式的环境下,接下来开始来输入吧!

  •  2.按下i进入编辑模式,开始编辑文字

在一般命令模式之中,只要按下【i、o、a】等字符就可以进入编辑模式了,在编辑模式当中,你可以发现在左下角状态栏中会出现--INSERT--的字样,那就是可以输入任意字符的提示。

这个时候,键盘上除了[Esc]这个按键之外,其他的按键都可以视作为一般的输入按钮,所以你可以进行任何的编辑。

当然,除了按【i、o、a】等字符之外,我们还可以按【R】,只不过R进入的是替换模式,意思就是只能替换

  • 3.按下[Esc]键回到一般命令模式

好了,假设我已经按照上面的样式给它编辑完毕了,那么应该要如何退出呢?是的,没错,就是给它按下[Esc]这个键即可,马上你就会发现界面左下角的-INSERT-不见了。

  • 4.进入命令行模式,文件保存并退出vi环境

OK,我们要保存了,保存(write)并退出(quit)的命令很简单,输入【:wq】即可保存退出。(注意了,按下:该光标就会移动到最下面一行去)

这时你在提示字符后面输入【Is-l】即可看到我们刚刚建立的test2文件,整个图有点像下面这样:


如此一来,你的文件 test2 就已经建立。

        需要注意的是,如果你的文件权限不对,例如为-r--r-—r--时,那么可能会无法写入,此时可以使用【强制写入】的方式吗?

可以,使用【:wq!】多加一个感叹号即可。不过,需要特别注意,那个是在你的权限可以改变的情况下才能成立的。

3.2按键说明

除了上面简易示范的i、[Esc]、:wq 之外,其实vim还有非常多的按键可以使用。

在介绍之前还是要再次强调,vi的三种模式只有一般命令模式可以与编辑、命令行模式切换,编辑模式与命令行模式之间并不能切换。

下面就来谈谈vi软件中会用到的按键功能吧!

第一部分:一般命令模式可用的功能按键说明,光标移动、复制粘贴、查找替换等

移动光标的方法
h  或向左箭头键光标向左移动一个字符
j   或向下箭头键光标向下移动一个字符
k   或向上箭头键光标向上移动一个字符
i   或向右箭头键光标向右移动一个字符
[Ctrl]+[f]屏幕【向下】移动一页,相当于[PageDown]按键(常用)
[Ctrl]+[b]屏幕【向上】移动一页,相当于[PageUp]按键(常用)
[Ctrl]+[d]屏幕【向下】移动半页
[Ctrl] + [u]屏幕【向上】移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
n<space>那个n表示【数字】,按下数字n后再按空格键,光标会向右移动这一行的n个字符,例如20<space>则光标会向后面移动20个字符距离
0或功能键[Home]

这是数字【0】:移动到这一行的最前面字符处(常用)

$或功能键[End]移动到这一行的最后面字符(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个文件的最后一行(常用)
nGn为数字,移动到这个文件的第n行,例如20G则会移动到这个文件的第20行(可配合:set nu)
gg移动到这个文件的第一行,相当于1G(常用)
n<Enter>n为数字,光标向下移动n行(常用)

注意:如果你将右手放在键盘上的话,你会发现hjki是排行在一起的,因此可以使用这四个按键来移动光标。

        如果想要进行多次移动的话,例如向下移动30行,可以使用“30j”或“30↓”的组合按键,亦即加上想要进行的次数(数字)后,按下操作即可

查找和替换
/word

向光标之下寻找一个名称为word的字符串。

例如要在文件内查找vbird 这个字符串,就输入/vbird即可(常用)

?word向光标之上寻找一个字符串名称为word的字符串
n

这个n是英文按键,代表【重复前一个查找的操作】。

举例来说,

如果刚刚我们执行/bird去向下查找vbird这个字符串,则按下n后,会向下继续查找下一个名称为vbird的字符串.

如果是执行?vbird的话,那么按下n则会向上继续查找名称为vbird的字符串

N这个N是英文按键,与n刚好相反,为【反向】进行前一个查找操作,例如/vbird后,按下N则表示【向上】查找vbird
:n1,n2s/word1/word2/g

n1与n2为数字,在第n1与n2行之间寻找word1这个字符串,并将该字符串替换为word2,

举例来说,在100到200行之间查找 vbird 并替换为 VBIRD则:“:100,200s/vbird/VBIRD/g”(常用)

:1,$s/word1/word2/g从第一行到最后一行寻找word1字符串,并将该字符串替换为word2(常用)
:1,$s/word1/word2/gc从第一行到最后一行寻找word1字符串,并将该字符串替换为word2,且在替换前显示提示字符给用户确认(confirm)是否需要替换(常用)

删除,复制,粘贴
x和X在一行当中,x为向后删除一个字符(相当于[del]按键),X为向前删除一个字符(相当于[Backspace]即退格键)(常用)
nx

n为数字,连续向后删除n个字符。

举例来说,我要连续删除 10个字符,【10x】

dd删除(剪切)光标所在的那一整行(常用)
nddn为数字,删除(剪切)光标所在的向下n行,例如20dd则是删除(剪切)20行(常用)
d1G删除(剪切)光标所在处到第一行的所有数据
dG删除(剪切)光标所在处到最后一行的所有数据
d$删除(剪切)光标所在处,到该行的最后一个字符
d0那个是数字的0,删除(剪切)光标所在处,到该行的最前面一个字符
yy复制光标所在的那一行(常用)
nyyn为数字,复制光标所在的向下n行,例如20yy则是复制20行(常用)
y1G复制光标所在行到第一行的所有数据
yG复制光标所在行到最后一行的所有数据
y0复制光标所在的那个字符到该行行首的所有数据
y$复制光标所在的那个字符到该行行尾的所有数据
p和P

p为将已复制的数据在光标下一行粘贴,P则为贴在光标上一行。

举例来说,我目前光标在第20行,且已经复制了10行数据,则按下p后,那10行数据会贴在原本的20行之后,即由21行开始贴,但如果是按下P呢?那么原本的第20行会被推到变成30行(常用)

J将光标所在行与下一行的数据结合成同一行
c重复删除多个数据,例如向下删除10行,[10cj]
u恢复前一个操作(常用)
[Ctrl]+r重做上一个操作(常用)
.

不要怀疑,这就是小数点,意思是重复前一个操作的意思。

如果你想要重复删除、重复粘贴等操作,按下小数点【.】就好(常用)

这个u与[Ctrl]+r是很常用的命令。一个是恢复,另一个则是重做一次,利用这两个功能按键,你的编辑,嘿嘿,很快乐的啊。

第二部分:一般命令模式切换到编辑模式的可用的按键说明

进入插入或替换模式的编辑模式
i和I

进入插入模式(Insert mode):

i为【从目前光标所在处插入】,|为【在目前所在行的第一个非空格符处开始插入】(常用)

a和A进入插入模式(Insert mode ):
a为【从目前光标所在的下一个字符处开始插入】,A为【从光标所在行的最后一个字符处开始插入】(常用)
o和O进入插入模式(Insert mode):
这是英文字母o的大小写,o为【在目前光标所在的下一行处插入新的一行】;O为在目前光标所在处的上一行插入新的一行(常用)
r和R进入替换模式(Replace mode):
r只会替换光标所在的那一个字符一次;R会一直替换光标所在的文字,直到按下Esc为
止(常用)
Esc退出编辑模式,回到一般命令模式中(常用)

上面这些按键中,在vim界面的左下角处会出现【--INSERT-】或【--REPLACE--】的字样。由名称就知道该操作了吧!

特别注意的是,我们上面也提过,你想要在文件里面输入字符时,一定要在左下角处看到 INSERT 或 REPLACE才能输入。

第三部分:一般命令模式切换到命令行模式的可用按键说明

命令行模式的保存,退出等命令
:w将编辑的数据写入硬盘文件中(常用)
:w!若文件属性为【只读】时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的文件权限有关
:q退出vim(常用)
:q!

若曾修改过文件,又不想保存,使用!为强制退出不保存

注意一下,那个感叹号(!)在vim当中,常常具有【强制】的意思。

:wq保存后退出,若为:wq!则为强制保存后退出(常用)
ZZ这是大写的Z,若文件没有修改,则不保存退出,若文件已经被修改过,则保存后退出
:w  [filename]将编辑的数据保存成另一个文件(类似另存新文件)
:r [filename]在编辑的数据中,读入另一个文件的数据,亦即将【filename】这个文件内容加到光标所在行后面
:n1,n2 w [filename]将n1到n2的内容保存为filename 这个文件
:! command暂时退出vim到命令行模式下执行command的显示结果。例如【:!ls /home 】即可在vi当中查看/home下面以Is输出的文件信息
set  nu显示行号,设置之后,会在每一行的前缀显示该行的行号
set nonu与set nu相反,为取消行号

特别注意,在Vim中,【数字】是很有意义的,数字通常代表重复做几次的意思,也有可能是代表去到第几个什么什么的意思

举例来说,要删除(剪切)50行,则是用【50dd 】。数字加在操作之前,那我要向下移动20行呢?那就是【20j】或是【20↓】即可。

        OK,会这些命令就已经很厉害了,因为常用到的命令也只有不到一半。通常vim的命令除了上面鸟哥注明“常用”的几个外,其他是不用背的,你可以做一张简单的命令表在你的屏幕壁纸上,一有疑问可以马上查询。


3.3. vim的缓存、恢复与打开时的警告信息

        目前主要的文本编辑软件都会有恢复的功能,即当你的系统因为某些原因而导致类似宕机的情况时,还可以通过某些特别的机制来让你将之前未保存的数据【救】回来,这就是鸟哥这里所谓的恢复功能。

那么vim有没有恢复功能?有的,vim就是通过缓存来恢复。

        当我们在使用vim 编辑时,vim会在与被编辑的文件的目录下,再建立一个名为filename.swp的文件。

        比如说编辑/tmp/vitest/man_db.conf这个文件时,vim会主动的建立/tmp/vitest/.man_db.conf.swp的缓存,你对man_db.conf 做的操作就会被记录到这个.man_db.conf.swp当中。如果你的系统因为某些原因掉线了,导致你编辑的文件还没有保存,这个时候.man_db.conf.swp就能够发挥恢复功能了。

我们来测试一下吧!下面的练习有些部分的命令

我们尚未谈到,没关系,你先照着做,后续再回来了解。



我们使用vim打开vitest,此时会进入到vim的界面,在vim的一般命令模式下按下【[ctrl]-z】的组合键就会退出来,就像下面这样子


        当我们在vim的一般命令模式下按下[ctl]-z的组合按键时,你的vim会被丢到后台去执行。这部分的功能我们会在进程管理当中谈到,你这里先知道一下即可。

回到命令提示字符后,接下来我们来模拟将 vim的工作不正常的中断吧!


我们看最后一行那个.vitest.swp

我们来模拟vim停止工作


这个 kil 可以模拟将系统的vim工作删除的情况,你可以模拟宕机。

由于vim的工作被不正常地中断,导致缓存无法借由正常流程来结束,所以缓存就不会消失,而继续保留下来,此时如果你继续编辑那个vitest,会出现什么情况?会出现如下所示的状态:

        由于缓存存在的关系,因此 vim会主动的判断你的这个文件可能有些问题,在上面的图例中vim提示两点主要的问题与解决方案,分别是这样的:

  • 问题一:可能有其他人或程序同时在编辑这个文件:

由于 Linux是多人多任务的环境,因此很可能有很多人同时在编辑同一个文件。如果在多人共同编辑的情况下,万一大家同时保存,那么这个文件的内容将会变的乱七八糟。为了避免这个问题,因此vim会出现这个警告窗口,解决的方法则是:

  1. 找到另外那个程序或人员,请它将该vim的工作结束,然后你再继续处理。
  2. 如果你只是要看该文件的内容并不会有任何修改编辑的操作,那么可以选择开启成为只读(O)文件,即上述界面反白部分输入英文【o】即可,其实就是[O]pen Read-Only的选项。
  • 问题二:在前一个 vim 的环境中,可能因为某些不知名原因导致vim 中断(crashed):

这就是常见的不正常结束vim产生的后果,解决方案依据不同的情况而不同,常见的处理方法为:

  • 如果你之前的vim 处理操作尚未保存,此时你应该要按下【R】,亦即使用(R)ecover 的选项,此时vim会加载.vitest.swp的内容,让你自己来决定要不要保存,这样就能够救回来你之前未保存的信息。不过这个.vitest.swp 并不会在你结束vim 后自动删除,所以你退出vim后还得要自行删除,.vitest.swp才能避免每次打开这个文件都会出现这样的警告。
  • 如果你确定这个缓存是没有用的,那么你可以直接按下【D】删除掉这个缓存,即(D)elete it 这个选项即可。此时vim会加载.vitest.swp,并且将旧的.vitest.swp删除后,建立这次会使用的新的.vitest.swp。

至于这个发现缓存警告信息的界面中,有出现六个可用按键,各按键的说明如下:

  1. [O]pen Read-Only:打开此文件成为只读文件,可以用在你只是想要查看该文件内容并不想要进行编辑操作时。一般来说,在上课时,如果你是登录到同学的计算机去看它的配置文件,结果发现其实同学它自己也在编辑时,可以使用这个模式;
  2. (E)dit anyway:还是用正常的方式打开你要编辑的那个文件,并不会加载缓存的内容,不过很容易出现两个用户互相改变对方的文件等问题。
  3. (R)ecover:就是加载缓存的内容,用在你要救回之前未保存的工作,不过当你救回来并且保存退出vim后,还是要手动自行删除那个缓存。
  4. (D)elete it:你确定那个缓存是无用的,那么打开文件前会先将这个缓存删除,这个操作其实是比较常做。因为你可能不确定这个缓存是怎么来的,所以就删除掉它吧!。
  5. (Q)uit:按下q就退出vim,不会进行任何操作回到命令提示字符。
  6. (A)bort:忽略这个编辑操作,感觉上与quit 非常类似,也会送你回到命令提示字符。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Perforce】QAC-分析时如何不应用某些规则

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决扫描项目时如何不应用某些规则进行分析。 2、 问题场景 对于一些建议性的MISRA规则&#xff0c;不想用于项目扫描&#xff0c;如何处理&#xff1f; 3、软硬件环境 1、软件版本&#xff1a;HelixQAC23.04 2…

STM32CubeIDE离线汉化教程

按照网上的方法下载好ZIP文件后 帮助->安装新软件-> 按顺序选择文件 点击完成&#xff0c;后等待右下脚的精度条到位即可

总结之企业微信(一)——创建外部群二维码,用户扫码入群

创建外部群 企微接口中没有直接通过服务端API接口创建外部群 可以通过jssdk创建外部群&#xff1a;引用jssdk调用会话接口wx.openEnterpriseChat https://work.weixin.qq.com/api/doc/90000/90136/90511 创建外部群二维码 需要通过企业微信的应用&#xff0c;并且配置客户联…

绝区陆--大语言模型的幻觉问题是如何推动科学创新

介绍 大型语言模型 (LLM)&#xff08;例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等&#xff09;已展示出为各种应用生成类似人类文本的出色能力。然而&#xff0c;LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…

下载安装Microsoft DirectX SDK(June 2010)

官方下载网址如下&#xff1a; Microsoft DirectX SDK(June 2010)链接 下载后是一个.exe文件 在安装之前&#xff0c;需要先检查你的电脑中是否已经安装过&#xff08;如果你安装过VS&#xff0c;那么一定会有这两个文件&#xff09; Microsoft Visual C 2010 x86 Redistribu…

解决 NullReferenceException: Object reference not set to an instance of an object

在 Unity 中 利用 URDF Importer import UR5e_gripper 的 URDF file 时出现错误&#xff1a; NullReferenceException: Object reference not set to an instance of an object。 理论上是有个Object 是 Null&#xff0c;当我再次检查URDF后仍觉得路径没有写错。 于是我 把Mesh…

压缩感知2——算法模型

采集原理 其中Y就是压缩后的信号表示(M维)&#xff0c;Φ表示采集的测量矩阵&#xff0c;可以是一个随机矩阵&#xff0c;X代表原始的数字信号&#xff08;N维&#xff09;。 常见的测量矩阵——随机高斯矩阵 随机伯努利矩阵 稀疏随机矩阵等&#xff0c;矩阵需要满足与信号的稀…

SenseVoice - 阿里最新开源精准多语言语音识别与情感辨识模型 本地一键整合包下载

阿里巴巴近期发布了开源语音大模型项目FunAudioLLM&#xff0c;该项目包含了两个核心模型&#xff1a;SenseVoice和CosyVoice。可以精准多语言识别并且进行语音克隆 本地一键包下载地址&#xff1a; SenseVoice - 精准多语言语音识别与情感辨识模型 本地一键整合包下载 SenseVo…

Appium-移动端自动测试框架详解

Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门&#xff0c;那么我们就直奔主题。文章结构如下&#xff1a; 为什么要使用Appium&#xff1f;如何搭建Appium工具环境?(超详细&#xff09;通过demo演示Appium的使用Appium如何实现移动端UI自…

基层医院、专科医院云HIS系统,支持电子病历四级,全套源码交付

云HIS系统采用B/S架构云端SaaS服务的方式提供&#xff0c;使用用户通过浏览器即能访问&#xff0c;无需关注系统的部署、维护、升级等问题&#xff0c;系统充分考虑了模板化、配置化、智能化、扩展化等设计方法&#xff0c;覆盖了基层医院的主要工作流程&#xff0c;能够与监管…

大模型常见的LoRA算法原理、实现和运用详解

文章目录 1. 前言2. 算法介绍2.1 微调2.2 核心思想 3. 几个关键问题3.1 LoRA如何应用在Transformer上3.2 LoRA的最佳秩r如何选择3.3 W W W和 Δ W \Delta W ΔW有什么关系 4. 源码5. 实际应用6. 总结7. 参考 1. 前言 本文是常用算法的快速浏览入门&#xff08;扫盲&#xff0…

升级iOS18有问题?学会这2招能解决90%iOS问题!

在 iOS 18beta发布后&#xff0c;有部分朋友升级后表示遇到了各种奇怪问题&#xff0c;比如升级卡在Apple Logo&#xff0c;黑屏&#xff0c;无限重启&#xff0c;卡在恢复模式&#xff0c;程序闪退&#xff0c;电池消耗过快&#xff0c;发烫等问题。 于是&#xff0c;小编决定…

HTML(27)——渐变

渐变是多个颜色逐渐变化的效果&#xff0c;一般用于设置盒子模型 线性渐变 属性&#xff1a;background-image : linear-gradient( 渐变方向 颜色1 终点位置, 颜色2 终点位置, ......&#xff09;&#xff1b; 取值: 渐变方向:可选 to 方位名词角度度数 终点位置:可选 百分…

生物素标记的柚皮苷探针;Biotin-Naringin

生物素标记的柚皮苷探针&#xff08;Biotin-Naringin&#xff09;是一种结合了生物素&#xff08;Biotin&#xff09;和柚皮苷&#xff08;Naringin&#xff09;特性的化合物&#xff0c;它在有机合成及药物化学技术领域具有重要意义。以下是对该探针的详细解析&#xff1a; 一…

研华工控机 UNO-2473G WIN7专业版系统下安装网卡驱动异常

基本配置&#xff1a;UNO-2473G、Windows 7 Pro 64bit 常规型嵌入式工控机&#xff0c;搭配Intel Atom™ E3845/Celeron J1900 处理器 第四代Intel Atom/Celeron J1900处理器&#xff0c;最高可达1.91/2.0 GHz&#xff0c;4GB DDR3L存储4/2 x GbE, 3 x USB 2.01 x USB 3.0或4…

VOS历史话单的非法呼叫话单解决方案,IPSS模块安装到VOS服务器,可大幅度提高安全性!

由于VOS的普及性&#xff0c;不得不承认VOS确实是非常优秀的软交换&#xff0c;但是很多客户在使用过程中都会遇到各种安全问题&#xff0c;比如话费被盗用了&#xff0c;历史话单一堆的非法呼叫话单&#xff0c;严重的影响到了话务安全&#xff0c;并不是那点话费的事了&#…

留学Assignment写作如何正确选择topic?

留学Assignment在写作之前首先需要选好topic&#xff0c;一个好的topic能让你的Assignment写起来更加顺畅&#xff0c;俗话说“文好题一半”&#xff0c;好的创作主题&#xff0c;不但对于写作帮助颇大&#xff0c;对于Assignment总体也是加分不少的。 添加图片注释&#xff0c…

python-课程满意度计算(赛氪OJ)

[题目描述] 某个班主任对学生们学习的的课程做了一个满意度调查&#xff0c;一共在班级内抽取了 N 个同学&#xff0c;对本学期的 M 种课程进行满意度调查。他想知道&#xff0c;有多少门课是被所有调查到的同学都喜欢的。输入格式&#xff1a; 第一行输入两个整数 N , M 。 接…

高,实在是高

go&#xff0c;去 //本义音通义通汉字“高”&#xff0c;指太阳升起、上升&#xff0c;即高上去 god | God&#xff0c;神&#xff0c;上帝 //本义音通义通“高的”&#xff0c;指太阳高高在上的&#xff0c;至高无上的 glad&#xff0c;高兴的 //本义音通义通“高了的”&#…

【CUDA|CUDNN】安装

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 显卡驱动安装参考之前的文章 cuda、cudnn 安装 1. cuda 安装 访问https://developer.nvidia.com/cuda-toolkit-archive 选择需要的版本&#xff1a;h…