【Linux】【Vim】Vim 基础

Vim/Gvim 基础

  • 文本编辑
    • 基础编辑
    • 操作符命令和位移
    • 改变文本
    • 重复改动
    • Visual 模式
    • 移动文本(复制、粘贴)
    • 文本对象
    • 替换模式
  • 光标移动
    • 以 word 为单位移动
    • 行首和行尾
    • 行内指定单字符
    • 移动到匹配的括号
    • 光标移动到指定行
    • 滚屏
    • 简单查找 /string
    • 标记
  • 分屏
    • vimdiff


文本编辑



基础编辑


Normal 模式下,使用如下命令进行基本的插入、删除等操作:

命令作用
iinsert,光标所在位置之前插入文本
aappend,光标所在位置的后面插入内容
I将光标置于当前行的第一个非空白字符,并进入 Insert 模式(行首插入内容)
A将光标置于当前行的行尾并进入 insert 模式
O光标所在行之后另起一行,并进入 insert 模式
x删除光标选中的内容
dd删除整行内容
J删除光标所在行的换行符(相当于是合并两行的内容)
u撤销上一次的操作
U撤销对一行的(连续)所有操作
Ctrl+R重做(反转撤销)
ZZ:wq保存并退出

示例1:删除换行符
在这里插入图片描述

示例2:撤销
在这里插入图片描述


操作符命令和位移


x 命令可以删除一个字符。使用一个命令记数 4x 可以删除 4 个字符。
dw 命令可以删除一个 word,你可以把其中的 w 看作是向右移一个 word 的命令。

其实,d 命令后面可以跟任何一个位移命令,它将删除从当前光标起到位移的终点处的文本内容。【delete】

例如,4w 命令是向前移动 4 个 word. 所以 d4w 命令就是删除 4 个 word。

Vim 只删除到位移命令之后光标的前一个位置。这是因为 Vim 知道你并不是要删除下一个 word 的第一个字符。

但是,如果你用e命令来移动到 word 的末尾,Vim 也会假设你是要包括那最后一个字符。

# Example 1
To err is human. To really foul up you need a computer.
				 ------------------>
				 		d4w
To err is human. you need a computer.

# Example 2
To err is human. You need a computer.
				 ------->
				 	d2e
To err is human. a computer.

删除的内容是否包括光标所移动到的那个字符上取决于你的位移命令。在这种不包括该位置的操作叫做"排外的"(exclusive), 把包括该位置的操作叫"内含的"(inclusive)。

例如,\$命令是移动光标到行尾。所以d$命令就是删除自当前光标到行尾的内容。这是一个"内含的"位移,所以该行最后一个字符也被删除。

在这里插入图片描述

此类命令有一个固定的模式:操作符命令 + 位移命令。首先键入一个操作符命令。比如 d 是一个删除操作符。接下来是一个位移命令,如 4lw,这样任何移动光标命令所及之处,都是命令的作用范围。


改变文本


操作符命令 c (change)的行为和 d 命令类似,不过在命令执行之后,会进入 insert 模式。

比如,cw 的意思是改变一个 word,或者说,它可以删除一个 word 并让 vim 处于 Insert 模式。如下示例所示:

在这里插入图片描述

这里的 c2wbe<Esc> 包含了如下内容:

在这里插入图片描述

这里其实有一个细节,为什么 "human"之前的空格并没有被删除?

【对每一个问题,都会有一个简单而清晰的答案,而那个答案总是错的】

cw 命令正式如此,c 操作符与 d 操作符一样,只是有一个例外:cw,它就象 ce 一样,改变到一直到 word 结尾的内容。而 word 之后的空格被留下了。

【很人性化,因为改变单词的时候,本身也不想删除那个空格】

就像 dd 命令可以删除整行一样,cc 命令可以改变整行。不过仍保持原来的缩进(每行开头的空白)。

也正如 d$ 删除到行尾为止的内容,c$ 改变当前光标到行尾的内容。就好象是用 d$ 删除然后又以a进入 Insert 模式追加新的文本一样。

快捷命令

有一些操作符+位移命令使用率是如此之高以至于它们以一个单独的字符作为其快捷方式:

快捷方式作用
xdl,删除当前光标下的字符
Xdh,删除当前光标左边的字符
Dd$,删除当前光标到行尾的内容
Cc$,修改到行尾的内容
scl,修改一个字符
Scc,修改一整行

此外,r 命令可以在 Normal 模式下完成字符的替换。也可以用"cl"或"s"完成同样的事情,但用"r"的话就不需要再用键回到 Normal 模式。

在这里插入图片描述


重复改动


.命令是 Vim 中一个简单而强大的命令。它会重复上一次做出的改动

如下示例,假设你在编辑一个 HTML 文件,想删除其中所有的 <B> 标签。你把光标置于<B>的 < 字符上然后命令df>。然后到\ </B> 的<上用 . 命令做同样的事。. 命令会执行上一次所执行的更改命令( 此例中是df>)。 要删除另一个标签,同样把光标置于 < 字符上然后执行.命令即可。

在这里插入图片描述

.命令会重复你做出的所有修改,除了 u 命令 CTRL-R 和以冒号开头的命令。

示例2:你想把"four"改为"five". 它在你的文件里多次出现。你可以用以下命令来做出修改:

在这里插入图片描述

【重复的是命令,而不是改动的内容】

如下两行文本,
在这里插入图片描述
将光标置于第一行的 1 上时执行 cwxyz,然后退回到 normal 模式,这个时候第一行变为
在这里插入图片描述
然后将光标置于第二行的 1 上,执行 . 命令,则第二行将会变为
在这里插入图片描述
而不是
在这里插入图片描述


Visual 模式


通常很难说用什么位移命令可以把光标刚好移动到你想删除的文本范围,这时你可以用 Visual 模式。

v可以进入 Visual 模式,移动光标以覆盖你想操纵的文本范围,同时被选中的文本会以高亮显示。选中完成之后,键入操作符命令。

在发出实际的更改命令之前,任何时间你都可以决定放弃,用 <Esc> 命令退出 Visual 模式。

下图的的高亮块就是在 visual 模式下选中的。光标的初始位置在 b,然后先 l 向右移,在 j 向下移,然后就变成了下图的样子。

在这里插入图片描述

这个时候,使用 d 命令,删除的也只是选中的内容,并不会完整的删除两行。

在这里插入图片描述

选择多行

如果想整行整行地操纵文本,使用V进入 Visual Line 模式。你会看到被选中的文本是一整行为最小选择单位。此时左右移动命令毫无意义。而上下位移命令则会整行整行地选择文本。

如下所示,光标 e 处的时候,使用 V,就直接选中整行,然后在使用上下方向键的时候,选中的也是整行。

在这里插入图片描述

【这个时候使用左右方向键,只会移动光标的位置,选中的内容还是完整的一行】

选择文本块

如果你想以一个矩形的文本块为对象进行操作,你需要用 CTRL+V 进入 Visual block 模式。在编辑表格时这可就派上用场了。

在这里插入图片描述

要删除其中的"Q2"列,把光标置于"Q2"的"Q"上。

按下CTRL-V进入 Visual block 模式,然后用"3j"向下移动 3 行,用"w"选择直到下一个word 的区域。

你可以看到被选中的文本中包含了下一列的第一个字符。使用"h"排除这一列。现在按下"d",中间的这一列就被删除了。

到另一端

如果你已经在 Visual 模式下选中了一些文本,但此时发现还要改变另一头的被选择区域。如果直接移动光标,之前选中的内容会被取消。

此时,可以使用 o 命令(o代表 other end,另一头)会让光标置于被选中文本的另一头,这样你就可以通过控制光标移动来决定被选文本将从何处开始。再按o又会让光标置于被选文本的末端。

当你进行矩形文本块内容的选择时,你有 4 个角都可以改变。o只会把你带到对角的位置去,使用O命令可以让你在同一行的左右两个角之间移动。

oO在 Visual 模式与 Normal 模式下行为迥异,在 Normal 模式下它们是在当前行的下面或上面插入一个新行。

多行插入

在使用vim编辑器时,有时候需要对多行代码进行加注释或去注释,该操作就可以在 visual 模式下完成,具体步骤如下:

(1)首先按键盘上的 ESC 进入命令行模式;
(2)再按Ctrl+V进入 VISUAL BLOCK 模式;
(3)利用上下左右(或 h j k l)键调整需要注释多少行以及行的宽度;【宽度其实无所谓】
(4)再按I进入插入模式;【行首插入内容】
(5)输入代表注释的符号,比如#;
(6)再次按ESC键,这时就可完成多行注释(可能需要等上一会,不要着急)

删除注释的方法和前面描述的删除 Q2 列的方法是一样的,在 VISUAL BLOCK 模式下,选中后使用 d 删除。

如果想要在多行的行尾插入相同的内容,其步骤如下:

(1)按Ctrl+v进入可视块模式
(2)通过上下按键选中多行
(3)按$定位到行尾
(4)按A进行行尾插入
(5)添加插入内容
(6)按 Esc 退出插入模式


移动文本(复制、粘贴)


粘贴(p)

使用 dx 这样的命令删除文本时,被删除的内容其实是被保存了起来。此时,可以用 p 命令把它取回来(在 Vim 中这叫 put)。

如果删除的是整行的内容,p 命令会把整个文本行都放到光标下面作为单独一行。如果删除的是一行的部分内容(比如说一个 word),p 命令会把这部分文本放到当前光标后面。

P 命令也是取回被删除的内容,不过它把被取回的内容置于光标之前。对于以 dd 删除的整行内容,P 会把它置于当前行的上一行。对于以 dw 删除的部分内容,P 会把它放回到光标之前(光标左边)。

复制文本(y)

y (yanking)操作符命令会把文本复制到一个寄存器中。然后可以用 p 命令把它取回。

Yanking 只是 Vim 对复制的另一种说法,c 字母已经用来表示更改操作符了, y还没人占用。把这个操作符叫做 “yank” 也会时时提醒你记得用y操作符。

因为 y 是一个操作符命令,所以可以用 yw 来复制一个 word,同样可以使用命令记数。例如,用 y2w 命令可以复制两个 word。

yw 复制的内容中包括了 word 之后的空白字符。如果你不想要它们,那就用 ye

yy 命令复制一整行,就象 dd 是删除一整行一样。不过并不像 D 删除当前光标至行尾的内容那样,Y也是复制整行的内容。注意这种规律中的例外!复制当前光标至行尾的命令是 y$。【 操作符 + 位移命令 】


文本对象


如果光标位于一个单词的中间而你要删除这个单词,通常你需要把光标移到该单词的开头然后用 dw 命令。不过有一个更简单的办法:daw

daw中的d还是操作符命令,aw 是一个文本对象。 (“aw"意为"A Word”. 这样"daw"的完整意思是"Delete A Word")更准确地说,该 Word 之后的空白字符也被删除了。
【正常情况下,删除一个 word 的时候,自然是想把其后面空格删除,这样保留下的 word 之间的间隔还是一个空格】

这里其实是对文本使用 " 操作符命令+文本对象 " 的方式进行修改。它很像操作符+位移命令,但是它的起始点不像前者一样始于当前光标,终于位移命令。它不管当前光标所在的位置而把整个文本对象作为操作对象。

例如,如果要删除一个句子,可以使用 das (delete a sentence);如果想以新的文本替代它,空白就可以留下来,可以使用 cis (Inner Sentence)。


替换模式


R 命令会让 Vim 进入 replace 模式。在此模式下,每个键入的字符都会替换掉当前光标下的字符。

replace 模式下的例外是按下回车键并不会把当前字符替换为回车,而是插入一个回车。

使用键盘上的 <Insert> 键来可以在 Insert 模式和 Replace 模式之间来回切换。

在 Replace 模式下,使用 <BS> 键做出修改的时候,你会发现原来的字符又回来了。所以它对于最后键入的字符来说实际上等价于一个撤销操作。


光标移动


在插入或删除文本之前,光标当然要先移动到正确的位置上,Vim 有众多的命令来移动光标。


以 word 为单位移动


命令作用
wword,光标向后移动到下一个 word 的首字符
bbackward,光标移动到前一个 word 的首字符
eend of word,光标向后移动到下一个 word 的最后一个字符
ge光标移动到前一个 word 的最后一个字符

这些命令可以自动换行,例如,移动到当前行的最后一个 word 的时候,再次使用 w,光标会移动到下一行的第一个 word。

如果当前光标在当前 word 上的位置不是最后一个字符,则 e 命令会把光标移动到当前 word 的最后一个字符上;

ge其实也不是e行为的完全反向版,不管当前光标在当前 word 中的位置,它都会移动到前一个 word 的最后一个字符上。

【其实无所谓这些细节,实际使用的时候不过是多按一次和少按一次的区别。】

上述命令会把特殊字符(如 . , _ /)当作 word 的边界,如下图所示:

在这里插入图片描述

如果从光标一开始在 g,使用 w 的时候,光标会一次跳转到 h / j / d / t k,这些特殊符号也相当于是一个 word。

如果想要从第一个 g 到 h 再到 k,可以使用 W

上述表格中的四个操作命令的大写形式就是以空白为分界进行 WORDs 之间的移动。【这里大写就是表示它不是常规意义的 word】


行首和行尾


命令作用
$End光标移动到当前行的行尾
^光标移动到当前行的第一个非空白字符上
0 或者 Home光标移动到当前行的第一个字符上(行首)

具体示例如下所示:

		^
	<----------
	This is a line with example text.
<--------------    ----------------->
		O					$

数字 + 命令可以实现多次的移动。但是在这里多次移动到行尾并没有什么意义,所以他被赋予了新的意义。 1$ 的意思是移动到当前行的行尾,2$ 的意思是移动的下一行的行尾,一次类推。

^0 不能和数字组合使用。


行内指定单字符


单字符搜索命令 fx 是从光标所在位置开始,向右查找第一个 x 字符,并将光标停留在该字符上。

3fx 就是向右跳转到第 3 个 x 字符。

Fx 是从光标所在位置开始,向左查找并跳转。

txTx 的命令可以实现该功能,只不过光标会停留在 x 字符的前一个字符上。

Notes:

  • 这四个命令都不会自动换行,只在行内搜索。
  • vim 中使用 ; 可以重复上一次执行的命令,上面给出的命令是可以使用 ; 来重复的。使用 , 可以反向重复。例如,Fx本身是向左搜索,用 , 重复时因为反转了命令的方向,所以又变为向右搜索。

移动到匹配的括号


%:跳转到与当前光标下的括号相匹配的那一个括号上去

如果当前光标在 “(” 上,它就向前跳转到与它匹配的 “)” 上,如果当前在 “)” 上,它就向后自动跳转到匹配的 “(” 上去。

该跳转对 []、{} 等同样适用,具体可以通过 matchpairs 选项来指定。

如果当前光标并没有停留在一个可用的括号字符上,%也会向前找到一个括号,并将光标跳转到与之匹配的括号上。例如,对于下述示例,如果光标一开始行首的 i 上,使用 % 之后,光标会跳转到 d 之后的 “)” 上。

if (a == (b*c)/d)
---+------------>
		%

光标移动到指定行


命令作用
GGo,把光标定位到最后一行的第一个行首
33G光标定位到第 33 行的行首
gg光标定位到第一行的行首

滚屏


命令作用
Ctrl+U文本向下滚动半屏,up,文本向下滚动,相对来说就是光标向上,向上翻页
Crtl+D文本向上滚动半屏,down,“光标向下移动”,向下翻页
Ctrl+Fforward,= page down,向下一整页
Crtl+Bbackward,= page up,向上一整页
zz将光标所在行置于屏幕正中央

简单查找 /string


最基本的查找方法:/string?string?是向上查找,就是使用 n 的时候会向上查找)

如果需要查找的字符串中有 .*[]^%/?~$ 这些特殊字符,需要使用 \ 进行转义。

查找时忽略大小写:set ignorecase / set noignorecase

/o + 会显示命令历史以 o 开头的需要查找的字符串。【长字符串不用每次都打字】

可以使用正则表达式,比如表示行首的 ^ 行尾的 $


假设你在当前文件中有一个 word 是"TheLongFunctionName", 你想查找它的下一次出现在哪。当然可以用 “/TheLongFunctionName”, 但这要敲太多次键盘。万一哪个字符敲错了 Vim 就找不到你真正想要的东西。

有一个便捷的方法:把光标定位于这个 word 上,然后按下 * 键。Vim将会取当前光标所在的 word 并以它为目标字符串进行搜索。

这个时候,vim 的底部会显示如下内容。
在这里插入图片描述

这里其实是精确查找的语法。例如,/\<the\> 就是精确查找 the 这个单词,而 /the 查找的是三个连续的字母。

【这里只是一个小细节,精确查找应该用的不多】


标记


使用 G 命令从一个地方跳转到另一个地方时,Vim 会记得你起跳的位置。这个位置在 Vim 中是一个标记,使用 `` 命令可以跳回到标记的出发点。

因为 `` 本身也是一个跳转命令,所以再次使用该命令的时候会跳转回来。【a→b→a这样的跳转】

一般地说,只要你执行一个命令使光标定位于当前行之外的某行上去,这都叫一个跳转。例如,/n 这些搜索命令也可以用于跳转。

但是字符搜索命令 fxtx,或者是以 word 为单位的光标移动命令 we 则不叫跳转。使用 hjkl 的移动也不叫跳转。

`` 相当于是一个两点之间跳转的命令,而 Ctrl+O(older)可以使光标跳转到更之前的位置。与之相反的命令是 Ctrl+I (因为键盘上 I 和 O 相邻)或者 Tab

具名标记

就是给光标的位置起一个名称,然后后续可以使用名称将光标跳转到相应的位置。

命令 ma 将当前光标下的位置名之为标记 a, 从 a 到 z 一共可以使用 26 个自定义的标记。定义后的标记在屏幕上也看不出来。不过 Vim 在内部记录了它们所代表的位置。

使用命令 `{mark} 就可以跳转到所标记的光标的位置,`a 就是跳转到之前标记为 a 的位置。

使用 :marks 可以查看已经标记的位置的列表,该列表中会有一些特殊的标记,其含义如下所示:

在这里插入图片描述


分屏


vim 可以在启动的时候分屏,也可以在使用阶段分屏,具体方法如下所述。

启动时分屏

左右分屏:vim -On file1 file2 ... filen

上下分屏:vim -on file1 file2 ... filen

其中,-on 中的 n 表示的是分几个屏,可以缺省不写,vim 会按照文件数量进行分屏。

编辑中分屏

上下分割当前文件:crtl+w s

上下分割,并打开新的文件:sp filename 【sp 和 s 就是 split,vim 默认是上下分屏】

左右分割当前打开的文件:ctrl+w v

左右分割,并打开一个新的文件:vsp filename 【v 指的是vertical,垂直分割】

【先按 crtl+w,松开后再按 s 或者 v

在这里插入图片描述

切换窗口

在这里插入图片描述

针对所有窗口的操作命令

qall、wall、wqall、qall!

这些命令会作用于所有的窗口。【本质上,这些命令只会作用于修改过的窗口】

vimdiff

vimdiff 命令可以分屏打开两个文件,并高亮显示两个文件的不同之处。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全的神秘世界】渗透测试基础

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试基础 基于功能去进行漏洞挖掘 1、编辑器漏洞 1.1 编辑器漏洞介绍 一般企业搭建网站可能采用了通用模板&#xff…

app抓包 chrome://inspect/#devices

一、前言&#xff1a; 1.首先不支持flutter框架&#xff0c;可支持ionic、taro 2.初次需要翻墙 3.app为debug包&#xff0c;非release 二、具体步骤 1.谷歌浏览器地址&#xff1a;chrome://inspect/#devices qq浏览器地址&#xff1a;qqbrowser://inspect/#devi…

Lombok:Java开发者的代码简化神器【后端 17】

Lombok&#xff1a;Java开发者的代码简化神器 在Java开发中&#xff0c;我们经常需要编写大量的样板代码&#xff0c;如getter、setter、equals、hashCode、toString等方法。这些代码虽然基础且必要&#xff0c;但往往占据了大量开发时间&#xff0c;且容易在属性变更时引发错误…

华为OD机试 - 计算误码率(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

怎么将几个pdf合成为一个?把几个PDF合并成为一个的8种方法

怎么将几个pdf合成为一个&#xff1f;将多个PDF文件合并成一个整体可以显著提高信息整合的效率&#xff0c;并简化文件的管理与传递。例如&#xff0c;将不同章节的电子书合成一本完整的书籍&#xff0c;或者将多个部门的报告整合成一个统一的文档&#xff0c;可以使处理流程变…

CCS811二氧化碳传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 ccs811.h文件 ccs811.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 CCS811模块是一种气体传感器&#xff0c;可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2…

6.接口测试加密接口(Jmeter/工具/函数助手对话框、Beanshell脚本)

一、接口测试加密接口&#xff0c;签名接口 1.加密算法&#xff1a; 可以解密的&#xff1a; 对称式加密&#xff08;私钥加密&#xff09;&#xff1a;AES&#xff0c;DES&#xff0c;Base64 https://www.bejson.com 非对称加密&#xff08;双…

Fisco Bcos 2.11.0通过网络和本地二进制文件搭建单机节点联盟链网络(搭建你的第一个区块链网络)

Fisco Bcos 2.11.0通过网络和本地二进制文件搭建单机节点联盟链网络(搭建你的第一个区块链网络) 文章目录 Fisco Bcos 2.11.0通过网络和本地二进制文件搭建单机节点联盟链网络(搭建你的第一个区块链网络)前言一、Ubuntu依赖安装二、创建操作目录, 下载build_chain.sh脚本2.1 先…

Linux-Swap分区使用与扩容

一、背景 在Linux系统中&#xff0c;swap空间&#xff08;通常称为swap分区&#xff09;是一个用于补充内存资源的重要组件。当系统的物理RAM不足时&#xff0c;Linux会将一部分不经常使用的内存页面移动到硬盘上的swap空间中&#xff0c;这个过程被称为分页&#xff08;paging…

【JavaEE初阶】多线程(4)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 线程安全的 第四个原因 代码举例: 分析原因 解决方法 方法1 方法2 wait(等待)和notify(通知) wait和sleep区别 线程安全的 第四个原因 内存可见性,引起的线程安全问…

CloudXR 套件扩展 XR 工作流

NVIDIA为开发者提供了一个先进的平台&#xff0c;开发者可以在该平台上使用全新NVIDIA CloudXR 套件来创建可扩展、品牌化的定制扩展现实&#xff08;XR&#xff09;产品。 NVIDIA CloudXR 套件基于全新架构而打造&#xff0c;是扩展XR生态的重要工具。它为开发者、专业人士和…

彻底理解浅拷贝和深拷贝

目录 浅拷贝实现 深拷贝实现自己手写 浅拷贝 浅拷贝是指创建一个新对象&#xff0c;这个对象具有原对象属性的精确副本 基本数据类型&#xff08;如字符串、数字等&#xff09;&#xff0c;在浅拷贝过程中它们是通过值传递的&#xff0c;而不是引用传递&#xff0c;修改值并不…

Git项目管理工具

分布式版本控制系统

数据集 wider person 户外密集行人检测 >> DataBall

数据集 wider person 用于野外密集行人检测的多样化数据集 行人检测 目标检测 户外密集行人检测的多样化数据集 WiderPerson: A Diverse Dataset for Dense Pedestrian Detection in the Wild article{zhang2019widerperson, Author {Zhang, Shifeng and Xie, Yiliang and Wa…

常用环境部署(二十)——docker部署OpenProject

一、安装Docker及Docker-compose https://blog.csdn.net/wd520521/article/details/112609796 二、docker拉取OpenProject镜像 1、拉取镜像 docker pull openproject/openproject:14 注意&#xff1a; 拉取镜像的时候会有超时的现象出现&#xff0c;大家重新拉取几次就行…

链式二叉树的基本操作(C语言版)

目录 1.二叉树的定义 2.创建二叉树 3.递归遍历二叉树 1&#xff09;前序遍历 2&#xff09;中序遍历 3&#xff09;后序遍历 4.层序遍历 5.计算节点个数 6.计算叶子节点个数 7.计算第K层节点个数 8.计算树的最大深度 9.查找值为x的节点 10.二叉树的销毁 从二叉树…

分贝转换 1 mVpp = 9.03dBmV

分贝转换 1 mVpp 9.03dBmV 函数发生器调节如下参数在频谱仪器上能看到9.03dBmv的电压值函数发生器产生 30mVpp 频谱仪会显示多少dBmV 函数发生器调节如下参数 输出频率&#xff1a;10 MHz 波形类型&#xff1a;正弦波 阻抗&#xff1a;50 Ω 幅度&#xff1a;1 mVpp …

【计算机网络 - 基础问题】每日 3 题(六)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

回溯-重新安排行程

1.排序 Collections.sort(list,(o1, o2)-> o1.get(0).compareTo(o2.get(0))); 2.返回值 3.往集合添加元素 Arrays.asList(元素) List<List<String>> list new ArrayList<>();List<String> path new ArrayList<>();// 将[["JFK"…

影刀RPA实战:网页爬虫之CSDN博文作品数据

今天我们使用影刀来采集网页数据&#xff0c;影刀RPA是一款功能强大的自动化办公软件&#xff0c;它可以模拟人工的各种操作&#xff0c;帮助企业自动处理大量重复性、有逻辑规则的工作。影刀RPA在网页数据采集方面表现出色&#xff0c;能够实现对任何桌面软件、Web程序的自动化…