【Linux】vim详解
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打开的文件是已经存在的文件,则可能会出现如下的信息:
如图所示,
- 底行的那个【"/etc/man_db.conf"[readonly] 131L,5165c】代表的是现在打开的文件名为/etc/man_db.conf,由于打开者的身份缘故,目前文件为只读状态,且文件内有131行以及具有5165个字符的意思。
- 右边那个1,1的意思是光标目前处于第一行的第一个字符
- 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 | 移动到这个文件的最后一行(常用) |
nG | n为数字,移动到这个文件的第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 | 删除(剪切)光标所在的那一整行(常用) |
ndd | n为数字,删除(剪切)光标所在的向下n行,例如20dd则是删除(剪切)20行(常用) |
d1G | 删除(剪切)光标所在处到第一行的所有数据 |
dG | 删除(剪切)光标所在处到最后一行的所有数据 |
d$ | 删除(剪切)光标所在处,到该行的最后一个字符 |
d0 | 那个是数字的0,删除(剪切)光标所在处,到该行的最前面一个字符 |
yy | 复制光标所在的那一行(常用) |
nyy | n为数字,复制光标所在的向下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会出现这个警告窗口,解决的方法则是:
- 找到另外那个程序或人员,请它将该vim的工作结束,然后你再继续处理。
- 如果你只是要看该文件的内容并不会有任何修改编辑的操作,那么可以选择开启成为只读(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。
至于这个发现缓存警告信息的界面中,有出现六个可用按键,各按键的说明如下:
- [O]pen Read-Only:打开此文件成为只读文件,可以用在你只是想要查看该文件内容并不想要进行编辑操作时。一般来说,在上课时,如果你是登录到同学的计算机去看它的配置文件,结果发现其实同学它自己也在编辑时,可以使用这个模式;
- (E)dit anyway:还是用正常的方式打开你要编辑的那个文件,并不会加载缓存的内容,不过很容易出现两个用户互相改变对方的文件等问题。
- (R)ecover:就是加载缓存的内容,用在你要救回之前未保存的工作,不过当你救回来并且保存退出vim后,还是要手动自行删除那个缓存。
- (D)elete it:你确定那个缓存是无用的,那么打开文件前会先将这个缓存删除,这个操作其实是比较常做。因为你可能不确定这个缓存是怎么来的,所以就删除掉它吧!。
- (Q)uit:按下q就退出vim,不会进行任何操作回到命令提示字符。
- (A)bort:忽略这个编辑操作,感觉上与quit 非常类似,也会送你回到命令提示字符。
相关文章:
![](https://i-blog.csdnimg.cn/direct/8e42f6a995d142ddb2bbbe158427f325.png)
【Linux】vim详解
1.什么是vi/vim? 简单来说,vi是老式的文本编辑器,不过功能已经很齐全了,但是还是有可以进步的地方。vim则可以说是程序开发者的一项很好用的工具,就连 vim的官方网站( http://www.vim.org)自己也说vim是一…...
![](https://www.ngui.cc/images/no-images.jpg)
Android11 mtk 第二次设置壁纸,锁屏壁纸不变的问题
1、情景:近日测试人员发现第一次更换壁纸后,主屏幕壁纸和锁屏壁纸均会改变;但第二次更换壁纸后,主屏幕壁纸会改变而锁屏壁纸不会改变。 2、要求:主屏幕壁纸和锁屏壁纸军改变 3、解决 路径:****\frameworks\base\services\core\java\com\android\server\wallpaper\Wallp…...
![](https://www.ngui.cc/images/no-images.jpg)
Java学习路线
目录 友情提醒第一章、Java基础1.1)第一部分:Java 入门1.2)第二部分:Java数组1.3)第三部分:Java面向对象1.4)第四部分:常用工具类1.5)第五部分:集合体系1.6&a…...
![](https://www.ngui.cc/images/no-images.jpg)
java 实现人脸检测
1. 安装必要的库 确保你已经安装了JPEG库、BLAS和LAPACK库。在Ubuntu或Debian系统上,可以使用以下命令安装: sudo apt-get update sudo apt-get install libjpeg-dev libblas-dev liblapack-dev 在CentOS或Fedora系统上,可以使用以下命令安…...
![](https://i-blog.csdnimg.cn/direct/db3a3cf7aeaa49f5a57478aed9994682.png)
VSCode神仙插件——Codeium (AI编程助手)
1、安装&登录插件 安装过程中会让你登录Codeium账户,可以通过Google账户登录,或者可以注册一个Codeium账户(如果没有弹出让你登录账户的界面,可以等安装结束后在右下角找到登录的地方) 右下角显示如下图所示&#…...
![](https://i-blog.csdnimg.cn/direct/44f1f0d2e32e4d2a927c7e65053ad7ba.png)
css文本划线效果(text-decoration相关属性详解)
/* 样式类型*/text-decoration: underline;/* 下划线颜色 */text-decoration-color: #ffcb15;/* 超出基线的字符不会被截断 */text-decoration-skip-ink: none;/*下划线厚度 */text-decoration-thickness: 5px;/* 与其原始位置的偏移距离 */text-underline-offset: 0;1. text-u…...
![](https://i-blog.csdnimg.cn/direct/41e4f975dfa44d95a1520dc19314e8c7.png)
《Windows API每日一练》8.5 listbox控件
列表框是将一批文本字符串显示在一个具有滚动功能的方框中的控件。通过发送消息到列表框的窗口过程,程序可以添加或删除列表中的字符串。当列表框中的一个项目被选中时,列表框控件便发送 WM_COMMAND消息到其父窗口。然后父窗口确定哪个项目被选中。 本节…...
![](https://www.ngui.cc/images/no-images.jpg)
使用Node.js 框架( Express.js)来创建一个简单的 API 端点
文章目录 使用Node.js 框架( Express.js)来创建一个简单的 API 端点什么是express安装修改代码 express 自动刷新 使用Node.js 框架( Express.js)来创建一个简单的 API 端点 什么是express Express 是一个保持最小规模的灵活的 …...
![](https://i-blog.csdnimg.cn/direct/fe189940720a4334a7615887601fbcb3.png)
企业服务行业CRM解决方案
企业服务行业CRM解决方案 强大的功能满足企业服务行业对客户管理、业务管理等方面的真实需求; 细分企业服务行业的不同领域,为不同业务场景提供个性化配置; 打通钉钉、企业微信等平台,降低企业使用CRM门槛,提供高性…...
![](https://www.ngui.cc/images/no-images.jpg)
服务器怎么进PE系统?
服务器进PE是指将服务器的操作系统切换到预安装环境(Pre-Installation Environment)的状态。在PE环境下,可以进行一些系统管理和故障排除的操作。在进入PE(Preinstall Environment)之前,首先需要确保你的服…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux内核编译与调试menuos-linux-3.18.6-在ubuntu20.04环境
1 具体操作 下载 linux-3.18.6内核 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz解压进入linux-3.18.6文件夹 tar -xvf linux-3.18.6.tar.xz cd linux-3.18.6/编译 #make x86_64_defconfig # 为x86_64生成配置 #make alldefconfig make i3…...
![](https://www.ngui.cc/images/no-images.jpg)
java-mysql 三层架构
在 Java 应用程序中,三层架构(Three-Tier Architecture)是一种常见的设计模式,用于分离应用程序的表示层、业务逻辑层和数据访问层。这种架构有助于提高代码的可维护性、可扩展性和可重用性。以下是详细解释 Java 应用程序中使用 …...
![](https://www.ngui.cc/images/no-images.jpg)
打工人如何应对AI对工作岗位的风险
面对AI对工作岗位的潜在取代,我们可以从多个层面制定应对策略,以确保劳动力市场的平稳过渡和社会的可持续发展。以下是一些具体的应对策略: 一、加强教育与培训 提升STEM教育:增加科学、技术、工程和数学(STEM&#…...
![](https://i-blog.csdnimg.cn/direct/afd5cc002d0540dcaf1675221ff82b14.png)
C++:从C语言过渡到C++
在这篇博客中,我将会介绍从C语言过渡到C的一些基础知识。 目录 C起源 C的关键字 输出hello,world 编辑 命名空间 1.什么是命名空间 2.namespace的作用 3.域作用限定符 4.命名空间的使用 IO流 缺省参数 函数重载 引用 1.引用的定义 2.引…...
![](https://www.ngui.cc/images/no-images.jpg)
在安卓中使用FFmpeg录制摄像头的视频并保存到本地MP4文件
在移动应用开发中,有时需要利用设备的摄像头录制视频,并且希望在录制过程中能够精确控制视频的质量、格式和时长。FFmpeg作为一个强大的多媒体处理工具,提供了广泛的功能和选项,能够帮助我们实现这样的需求。 添加依赖 在安卓平台…...
![](https://i-blog.csdnimg.cn/direct/c5da5fff2816463981af4698a2cb53ad.gif)
Vue从零到实战第一天
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...
![](https://img-blog.csdnimg.cn/direct/3a3173fc7c7646fb962d29ef4163637c.png)
BUUCTF - Basic
文章目录 1. Linux Labs 【SSH连接漏洞】2. BUU LFI COURSE【文件包含漏洞】3. BUU BRUTE【暴力破解用户名密码】4. BUU SQL COURSE【SQL注入-当前数据库】5. Upload-Labs-Linux 1【文件上传漏洞】7. Buu Upload Course 1【文件上传包含漏洞】8. sqli-labs 1【SQL注入-服务器上…...
![](https://www.ngui.cc/images/no-images.jpg)
如何理解Node.js?NPM?Yarn?Vue?React?
一、背景 对后端技术栈更熟悉,对前端技术栈不了解,希望通过前后端的技术栈进行对比,可以更直观地了解前端技术栈。 二、Node.js Node.js 是一个基于 Chrome V8 JavaScript 引擎的 JavaScript 运行环境。它使得 JavaScript 可以在服务器端运…...
![](https://img-blog.csdnimg.cn/img_convert/b24da1bb2028a048bd669714bad6c435.jpeg)
苹果入局,AI手机或将实现“真智能”?
【潮汐商业评论/原创】 “AI应用智能手机不就是现在的AI手机。” 当被问到现阶段对AI手机的看法时,John如是说。“术业有专攻,那么多APP在做AI功能,下载用就是了,也用不着现在换个AI手机啊。” 对于AI手机,或许大多…...
![](https://i-blog.csdnimg.cn/direct/33c6feb29ad040c2843413d4791964f4.png)
AI网络爬虫019:搜狗图片的时间戳反爬虫应对策略
文章目录 一、介绍二、输入内容三、输出内容一、介绍 如何批量爬取下载搜狗图片搜索结果页面的图片?以孙允珠这个关键词的搜索结果为例: https://pic.sogou.com/pics? 翻页规律如下: https://pic.sogou.com/napi/pc/searchList?mode=2&start=384&xml_len=48&am…...
Windows 网络重置及重置网络可能出现的问题( WIFI 没有了 / WLAN 图标消失)
当 Windows 网络出现本机故障时,一般从以下两个方面解决:网络栈和使用网络栈的组件或程序。 1、Winsock 组件问题 以管理身份运行 cmd,输入以下命令 netsh winsock reset重置 Winsock 组件以修复网络连接问题。 Winsock 是 Windows 操作系…...
![](https://img-blog.csdnimg.cn/direct/ab386bb77e46451aa8e7ac96752a60b9.jpeg)
100 个网络基础知识普及,看完成半个网络高手!
1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层࿰…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
高盛开源的量化金融 Python 库
GS Quant GS Quant是用于量化金融的Python工具包,建立在世界上最强大的风险转移平台之一之上。旨在加速量化交易策略和风险管理解决方案的开发,凭借25年的全球市场经验精心打造。 它由高盛的定量开发人员(定量)创建和维护&#…...
![](https://www.ngui.cc/images/no-images.jpg)
【Linux】docker和docker-compose 区别是什么
Docker 和 Docker Compose 是用于容器化应用的工具,它们在开发、部署和管理容器化应用程序时有不同的作用。以下是对它们的简要介绍和功能描述: Docker 定义: Docker 是一个开源的平台,允许开发者自动化地部署、扩展和管理应用程序容器。容器是一种轻量级、可移植、独立的软…...
![](https://i-blog.csdnimg.cn/direct/98b90c7697764deda22b571b501e1071.gif)
Qt图片缩放显示
在Qt中,如果你想显示图片的像素或者对图片进行缩放显示,可以使用 QImage 类来处理图片数据,并使用 QLabel 或自定义的 QWidget 来显示图片,但是很难通过鼠标进行缩放显示 QGraphicsView可以实现此功能 在Qt中,QGraphi…...
![](https://i-blog.csdnimg.cn/direct/fcc14d8ee26549d78ccaac71da8f6f14.png)
47、lvs之DR
1、DR模式: 1.1、lvs三种模式: nat 地址转换 DR 直接路由模式 tun 隧道模式 1.2、DR模式的特点: 调度器在整个lvs集群当中是最重要的,在nat模式下,即负载接收请求,同时根据负载均衡的算法转发流量&…...
![](https://i-blog.csdnimg.cn/direct/7d20ccf7ea6842a0a3a58a798bac8b8e.png)
分布式技术栈、微服务架构 区分
1.分布式技术栈 这些技术栈都是为了更好的开发分布式架构的项目。 (大营销平台的系统框架如下图,扩展的分布式技术栈) (1)Dubbo——分布式技术栈 DubboNacos注册中心是应用可以分布式部署,并且提供RPC接…...
![](https://i-blog.csdnimg.cn/direct/490586dfd90644b8bdda7b9dd4c058b3.png#pic_center#pic_center)
【JavaEE精炼宝库】文件操作(2)——文件内容读写 | IO流
文章目录 一、输入流1.1 InputStream 概述:1.2 read 方法详解:1.3 close 方法:1.4 利用 Scanner 进行读操作:1.5 Reader: 二、输出流2.1 OutputStream 概述:2.2 write 方法详解:2.3 利用 PrintW…...
![](https://www.ngui.cc/images/no-images.jpg)
C++ 指针变量做参数传递时的情况分析
前言 指针变量作为参数传递时,很容易混淆指针本身和指针指向的内容,实际应用中可能会导致无法预料的问题,所以做一下详细分析。 注意,在测试过程中为了看测试效果,有些指针变量分配了空间,但是未做回收&am…...
![](https://i-blog.csdnimg.cn/direct/32579eed840845d9bedc6f91708d6a1e.png)
Linux环境下Oracle 11g的离线安装与配置历程
在成功体验了 Windows 版本的Oracle 11g 后,这几天心血来潮,决定再挑战一下Linux 环境下的安装,特别是在考虑到部门内部虚拟机无法联网的情况下,我选择了在CentOS 7上进行离线安装。这次安装之旅,主要参考了下面大佬的…...
![](https://www.oschina.net/img/hot3.png)
富平做网站/推广什么app佣金高
2019独角兽企业重金招聘Python工程师标准>>> 死循环的时候 ctrlc 暂停程序 thread apply all bt 查看多线程堆栈 如果线程多需要多敲几下回车 输入c 继续运行程序 thread apply all bt 查看多线程堆栈 对比前后两次堆栈内容 有变化的线程可能是死循环的线程 转载于:…...
![](https://img-blog.csdnimg.cn/20201007205012479.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2FhMjUyODg3Nzk4Nw==,size_16,color_FFFFFF,t_70#pic_center)
太平洋手机报价大全/家庭优化大师
什么是架构分隔 单体 单体:是把系统部署到一台服务器上,所有的请求业务都由这台服务器处理 优点:适合小型系统,节省资源 缺点:安全性低,一旦有突发压力, 整个系统都会面临崩溃 分层—隔离效果…...
![](https://img-blog.csdnimg.cn/e5ca98b9830a4ea7a2ce617bc103202f.png)
58同城网站建设要多少钱/个人网站设计成品
一顿操作猛如虎,点击提交超时了。 二话不说翻题解,评论区里全人才。 反反复复终得道,再次尝试却报错。 行行检查字字改,击败用户百分五。 运行一夜的 一哥:哥的寂寞你不懂,不说了继续看运行日志了 段…...
![](https://img-blog.csdnimg.cn/e3d4e738a6ec4809b415037e3e25cd90.jpeg#pic_center)
石景山区城乡建设委员会网站/百度网站是什么
好消息: 近日,拉勾招聘数据研究院对程序员群体开展深度调研后,发布了一份《2022程序员群体职场洞察报告》(以下简称报告),对当下程序员群体职场生存状态、薪资水平和职场选择等方面给出了数据参考。 近8成…...
![](https://images2017.cnblogs.com/blog/417876/201709/417876-20170930145309762-329539544.png)
设计网站网站名称/企业网站营销实现方式解读
继上一篇http://www.cnblogs.com/EasonJim/p/7613595.html介绍了断路器之后,其实它还提供了一个管理页面来监控这些应用的调用数据。 首先,我是基于上一个例子ZooKeeper实现的服务注册与发现:http://www.cnblogs.com/EasonJim/p/7613734.html…...
![](/images/no-images.jpg)
网站建设谈业务要知道什么/网络推广费用计入什么科目
js删除网页中图片width 和 height 一段代码轻松搞定 适用于: 电脑端网页带图片属性导致移动网页显示错位/错误 备注: 需搭配jquery.min.js (注!jquery-2.0以上版本不再支持IE 6/7/8) 并不是最新的版本就最好的,而是根据您项目…...