菜鸟vimer成长记——第2.1章、normal模式
目的
掌握normal模式下常用操作的语法和概念,这些操作对应的应用场景以及实用技巧。
通过normal模式举一反三掌握cmd-line和visual的常用文本操作。
简介
文本操作的理想状态为:一个操作符+一个动作命令。
normal、visual、cmd-line都具有操作文本的基本功能。
- normal 操作符+动作命令。
- visual 动作命令+操作符。
- cmd-line 匹配范围+操作符。
这三个在文本的基础操作时实现的功能是一样的。主要围绕着normal来讲,其他的举一反三即可。
学习新的动作命令及操作符,就像是在学习Vim 的词汇一样。如果掌握了这一简单的语法规则,通过组合,在词汇量增长时,就能表达更多的想法。所以必须明确每个操作的真实对应的概念,因为这些概念在整个vim都是通用的。
统一规则
- 命令一般都是成对出现的,所以可以合起来记,这样记忆场景量能少一半。例如:
- 单词移动,从左向右和从右向左都有对应的动作命令。从左到右:w|W,e|E。从右向左:b|b,ge|gE.....
- 屏幕滚动, 向前和向后。Ctrl+F|Ctrl+B, Ctrl+U|Ctrl+D
- 大小写。gu |gU
- 命令是象形。理解这个象形,有助于记忆。例如:
- 符号本身即表示向前还是向后的概念。),},],>
- 小写的时候代表 word,大写的代表WORD。 单词移动:w(word),W(WORD)
- 比如在方向前加g,表示物理行和屏幕行。 k(移动到下一个物理行),gk(移动到下一个屏幕行)
- 大写代表到行尾。C相当于c$,D相当于d$。
- 大小写表示方向的。f{char} 从左向右查找,F{char}从右向左查找。
- 一个操作符命令被连续调用两次时,它会作用于当前行。比如:dd:删除当前行,yy:复制当前行,>>:缩进当前行......
基本概念
单词
由非空白字符组成的连贯的集合,由空白字符分隔。字符不包括关键字(iskeyword)。
详情可以查看:h word ,:h iskeyword。
大单词
由非空白字符组成的连贯的集合,由空白字符分隔。字符包括关键字(iskeyword)。
例如:
This is mine/yours
其中的"mine"是word,而"mine/yours"是一个WORD,这里"mine","/","yours"是三个word。这里的"/"就是iskeyword。
详情可以查看:h WORD,:h iskeyword。
句子
一个句子,以".","!","?"结尾。需要注意的是,是英文状态中的符号,中文状态下是无效的,比如"。"。
详情可以查看:h sentence。
行
实际行与屏幕行的区别。
与许多文本编辑器不同,Vim 会区分实际行与屏幕行。当‘wrap’ 设置被启用时 (缺省启用),每个超出窗口宽度的文本行都会被回绕显示,以保证没有文本显示不出 来。这样一来,文件中的一行也许会被显示为屏幕上的若干行。要想知道实际行与屏幕行之间的不同,最简单的方法是启用‘number’ 设置。
理解实际行与屏幕行间的差别很重要,因为 Vim 提供了不同的动作命令来操作 这两者。j 和k 命令会根据实际行向下及向上移动,而gj 和gk 则是按屏幕行向下 及向上移动。即只要有加g就表示的是屏幕行,没有加g就表示的是实际行。
段落
以空行区分开段落。
详情可以查看:h paragraph。
方法
类似于java的编程语言的一个方法。
详情可以查看:h various-motions里的]m。
结构
有两种情况:
1、以一个符号开始,又以这个符号结束的。比如(),[],{},<>,"",''。
2、以标签开始,又以这个标签结束的。比如 <aaa> </aaa>
这个主要是文本选择的时候用的比较多。一般会区分a和i(inner)。a表示整个结构,i表示这个结构内部的文本。
详情可以查看:h object-select ,:h tag-blocks。
操作符
约定:如果后面需要跟动作命令的用{motion}表示。
详情可以查看 :h operator ,:h xx(操作符)。
修改
定义:删除指定的文本并且进入insert模式。
语法:
操作符 | 实现功能 |
---|---|
c{motion} | 删除指定动作命令选择代表的文本并且进入insert模式 |
cc | 删除当前行并且进入insert模式 |
C | 删除到光标到行尾的文本并且进入insert模式。相当于c$ |
s | 删除光标下的字符并且进入insert模式。相当于cl |
S | 删除当前行。相当于cc。 能不按shift键我都不愿意用shift。所以一般直接用cc |
删除
定义:删除指定的文本。
语法:
操作符 | 实现功能 |
---|---|
x | 删除光标下的字符 |
X | 删除光标前一个字符 |
d{motion} | 删除指定动作命令代表的文本 |
dd | 删除当前行 |
D | 删除光标到当前行行尾。相当于d$ |
大小写切换
定义:指定的文本大小写切换。
语法:
操作符 | 实现功能 |
---|---|
~ | 切换光标下的字符大小写 |
~~ | 切换当前行的大小写 |
g~{motion} | 切换动作命令代表的文本的大小写 |
gu{motion} | 把动作命令代表的文本变为小写 |
gugu | 当前行变为小写 |
gU{motiong} | 把动作命令代表的文本变为大写 |
gUgU | 当前行变为大写 |
复制,粘贴
定义:复制文本到寄存器。
语法:
操作符 | 实现功能 |
---|---|
y{motion} | 复制动作命令代表的文本到寄存器 |
yy | 复制当前行到寄存器 |
Y | 复制当前行到寄存器,相当于yy。能不按shift键我都不愿意用shift。所以一般直接用yy |
定义:把复制的文本粘贴出来。
语法:
操作符 | 实现功能 |
---|---|
p | 把复制的文本粘贴到光标之后。如果复制的是行,则放在当前行的下面,并且光标停留在复制文本的第一行位置 |
P(Shift+p) | 把复制的文本粘贴到光标之前。如果复制的是行,则放在当前行的上面,并且光标停留在复制文本的下一行位置 |
gp | 把复制的文本粘贴到光标之后。如果复制的是行,则放在当前行的下面,并且光标停留在复制文本的第一行位置 |
gP(Shift+p) | 把复制的文本粘贴到光标之前。如果复制的是行,则放在当前行的上面,并且光标停留在复制文本的下一行位置 |
注意事项 :
- 有加g的操作符,如果是行复制需要注意。有加g最后光标停留在复制的文本的下一行,没加g最后光标停留在复制的文本第一行。
缩进
定义:针对文本进行缩进。缩进针对的是行,所以是文本动作选择对应的行的缩进。
语法:
操作符 | 实现功能 |
---|---|
>{motion} | 向右缩进动作命令文本代表的行 |
>> | 向左缩进当前行 |
<{motion} | 向左缩进动作命令文本代表的行 |
<< | 向左缩进当前行 |
折叠
把文本折叠起来。此时操作折叠相当于操作一行。
这个现在暂时不涉及,感觉暂时应用不会太多,如果有用到后续会补充。
动作命令
用来选定要操作的文本的范围。
基本所有的动作命令前都可以加上量词{count}表示重复,就不在一一做说明。
详情可以查看 :h motion,:h usr_03.txt,:h xx(动作命令)。
从当前光标到下一个光标
上下左右
语法:
动作命令 | 动作说明 |
---|---|
h | 向左移动一个字符 |
l | 向右移动一个字符 |
j | 向下移动一个实际行 |
gj | 向下移动一个屏幕行 |
k | 向上移动一个实际行 |
gk | 向上移动一个屏幕行 |
注意事项:
- g用于区别实际行和屏幕行
行定位
语法:
动作命令 | 动作说明 |
---|---|
0 | 移动到实际行的行首 |
g0 | 移动到屏幕行的行首 |
^ | 移动到实际行的第一个非空白字符 |
g^ | 移动到屏幕行的第一个非空白字符 |
$ | 移动到实际行的行尾 |
g$ | 移动到屏幕行的行尾 |
gm | 移动到屏幕行的中间 |
+ | 移动到下一行行首第一个非空白字符 |
- | 移动到上一行行首一个非空白字符 |
注意事项:
- 0与^的区别在于非空白字符。
- g用于区别实际行和屏幕行
行查找
语法:
动作命令 | 动作说明 |
---|---|
F{char} | 从右向左查找字符。光标停留在找到的字符上面。 |
f{char} | 从左向右查找字符。光标停留在找到的字符上面。 |
T{char} | 从左向右查找字符。光标停留在找到的字符后一个字符。 |
t{char} | 从左向右查找字符。光标停留在找到的字符前一个字符。 |
; | 重复上一次的行查找(f,F,t,T) |
, | 回到上一次的行查找的位置 |
注意事项:
- 大写字母是从右向左,小写字母是从右向右
- f系统是光标停留在查找到的字符上面,t系列是光标停留在查找到的字符临近一个字符。
行跨越
语法:
动作命令 | 动作说明 |
---|---|
G | 文件的最后一行 |
nG | 跳到文件的第n行。 |
gg | 文件第一行,相当于1G |
n% | 跳到文件的百分之n行。 |
单词移动
语法:
动作命令 | 动作说明 |
---|---|
w | 从左向右,移动到下一个单词词首 |
W | 从左向右,移动到下一个大单词词首。 |
b | 从右向左,如果光标不是在词首。则移动到本单词词首。如果在词首移动到下一个单词词首。 |
B | 从右向左,如果光标不是在词首。则移动到本单词词首。如果在词首移动到下一个大单词词首。 |
e | 从左向右,如果光标不是在词尾,则移动到本单词词尾。如果在词尾移动到下一个单词词尾 |
E | 从左向右,如果光标不是在词尾,则移动到本单词词尾。如果在词尾移动到下一个大单词词尾 |
ge | 从右向左,移动到下一个单词词尾 |
gE | 从右向左,移动到下一个大单词词尾 |
注意事项
- 大写代表WORD,小写代表word
文本移动
语法:
动作命令 | 动作说明 |
---|---|
) | 移动下一个句子句首。 |
( | 移动上一个句子句首。 |
} | 移动下一个段落段首前的空行上 |
{ | 移动上一个段落段首前的空行上 |
]] | 移动到下一个以“{"为第一个字符的行首。如果结合操作符,则停留下一个"{"的上一行。 |
[[ | 移动到上一个以“{"为第一个字符的行首。如果结合操作符,则停留上一个"{"的那一行 |
][ | 移动到下一个以“}"为第一个字符行首。如果结合操作符,则停留下一个"}"上一行 |
[] | 移动到上一个以“}"为第一个字符行首。如果结合操作符,则停留上一个"}"那一行 |
标记
标记有两类型的符号'(单引号),`(反撇键)。',表示定位到行首。`,表示定位到行首的第一个非空白地方。后面跟的任何命令,两个类型都有,所以就不一一说明了只取'来做语法说明。
语法:
动作命令 | 动作说明 |
---|---|
m{a-zA-Z} | 设置标记 |
'[ | 跳到最近一次修改或者复制文本的第一行位置 |
'] | 跳到最近一次修改或者复制文本的最后一行位置 |
'> | 跳到最近一次visual选择的最后一行位置 |
'< | 跳到最近一次visual选择的第一行位置 |
''(两个单引号) | 跳到最近一次上方位置 |
'" | 跳到文件上一次打开的最后位置 |
'^ | 跳到光标退出插入模式的地方 |
'. | 跳到最后一次文件修改的地方 |
]' | 跳到上一个小写字母标记(用:marks查看)的地方 |
[' | 跳到下一个小写字母标记的地方 |
注意事项:
- 还有一些没有实际意义的,不列出来了。'),'},'(,'{ 相当于(,),{,}。
- 需要注意的是:配合cmd-line下的:marks。查看所有标记 。
详情可以查看:h marks。
跳越
一个跳越,指定的是使用以下命令: "'", "`", "G", "/", "?", "n","N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" 等命令
语法:
动作命令 | 动作说明 |
---|---|
Ctrl+o | 跳到上一个光标位置 |
Ctrl+i | 跳到下一个光标位置 |
ng, | 向之前n次修改跳越 |
ng; | 向之后n次修改跨越 |
注意事项:
- 配合cmd-line下的:jumps,查看所有跳越。
- 配合cmd-line下的:changes,查看所有修改的跳越。
详情可以查看:h jumps ,:h changes 。
变量
语法:
动作命令 | 动作说明 |
---|---|
% | 找到匹配的([{}]) |
[( | 找到不匹配的( |
[{ | 找到上一个不匹配的{ |
]m | 跳到下一个方法 |
]符号( #,*,/) | 跳到下一个符号的位置 |
从当前光标选择区域文本
文本选择
一旦执行这个动作命令,就相当于执行这个选择的区域。
a和i的区别。 i:表示的是inner,指的是区域内的文本;a:表示的是a,指的是一个完整的区域文本内容。
后面就只写区域名称,不一一写出来了,都是成对出现的。
语法:
动作命令 | 代表的文本区域 |
---|---|
s | 句子 |
p | 段落 |
]或[ | 一个"]"块 |
)或( | 一个"("块 |
}或{ | 一个"{"块 |
b | 相当于一个"("块 |
B | 相当于一个"{"块 |
>或< | 一个"<"块 |
t | 一个tag blocks,相当于<aa></aa> |
" | 一个"""块 |
' | 一个"'"块 |
详情可以查看:h object-select。
滚屏
当前窗口滚动文本内容显示。
z{count}CR(回车键)。设置窗口高度。
详情可以查看:h scroll.text ,:h xx。
上下滚屏
语法:
动作命令 | 动作说明 |
---|---|
CTRL+E | 向下一行。光标一直往上走,直到顶到屏幕第一行,滚动的是内容 |
CTRL+Y | 向上一行.光标一直往下走,直到顶到屏幕最后一行,滚动的是内容 |
Ctrl+D | 向下半屏。光标在屏幕的相对位置不变,滚动的是内容 |
Ctrl+U | 向上半屏。光标在屏幕的相对位置不变,滚动的是内容 |
CTRL+F | 向下一屏。光标一直在第一行,滚动的是内容。 |
CTRL+B | 向上一屏.光标一直在最后一行,滚动的是内容。 |
屏幕不动光标动
说明:屏幕里的内容不滚动,光标移动。
语法:
动作命令 | 动作说明 |
---|---|
H | 光标定位到当前屏幕最上行 |
M | 光标定位到当前屏幕的中间行 |
L | 光标定位到当前屏幕的最下行 |
基于光标滚一屏
说明:光标在原来的物理行位置不动,屏幕里的内容滚动最大值一屏。
语法:
动作命令 | 动作说明 |
---|---|
zt | 光标置于屏幕第一行,光标的列还是和移动之前一致。 |
z+ | 光标置于屏幕第一行。相当于z<CR(回车键)>,光标在于行首 |
zz | 光标置于屏幕中文,光标的列还是和移动之前一致。 |
z. | 光标置于屏幕中文,光标在于行首 |
zb | 光标置于屏幕下方,光标的列还是和移动之前一致。 |
z- | 光标置于屏幕最后一行,光标在于行首 |
注意事项:
- z后面如果跟的是字母则停留在原来的位置,如果跟的是字符停留在行首
详情可以查看,:h z
算术运算
{count}ctrl+a 加法
{count}ctrl+x 减法
在做一些数字处理和校正时有用。例如
//要把第一个0px改为180px
.blog { background-position: 0px 0px }
//此时如果常规操作,f0s180<ESC>
//更快的操作就是使用算术运算,直接180Ctrl+A
宏
语法:
定义宏:
1、q{name}
2、录制的命令
3、q
使用宏:
${count}@{name}
//要生成一个一百行的序列号
//先输入文本
、
//开始录制
//qayyp(Ctrl+A)q
//执行宏
//98@a
小技巧
这些小技巧都出处于《vim实用技巧》,大家如果有兴趣可以进一步阅读学习。
构造可重复的修改
假设光标位于行尾处的字符“h”上,而我们想要删除单词“nigh”:
The end is nigh
我们尝试了3 种不同的方式来删除一个词:dbx、bdw 以及daw。他们高尔夫数(按键操作数)都是3,哪种方式最具重复性?我们针对这三种情况,都使用.命令操作一下。
dbx包含两步操作:db 命令删除至单词的开头,而后x 命令删除一个字符。如果我们跟着执行一次. 命令,它会重复删除一个字符( . = = x )。我不觉得这有什么价值。
bdw包含两步。这一次,b 只是一次普通的移动,而dw 完成修改。此时用. 命令会重复dw,删除从光标位置到下个单词开头的内容。不过因为我们刚好已经在行尾了,并没有“下一个单词”,所以在这个场景里. 命令没什么用。不过,至少它代表了一个更长点的操作(. = = dw)
daw只调用一个操作:daw。这个操作不仅仅删除了该单词,它还会删除一个空格,因此光标最终会停在单词“is”的最后一个字符上。如果此时我们使用. 命令,它会重复上次删除单词的命令。这一次, . 命令会做真正有用的事情(. = = daw)。
结论:daw 可以发挥. 命令的最大威力,因此我宣布它是本轮的获胜者。
如果你发现自己要在几个地方做同样的小修改,就可以尝试构造你的修改,让它们能够被. 命令重复执行。要识别出这类机会需要进行一定的实践,不过一旦你养成了使修改可重复的习惯,那么你就会从 Vim 这里得到“奖赏”。
能够重复,就别用次数
在处理某些特定工作时,使用次数可以使按键次数变得最少,不过我们并不是非得这样不可。我们需要认真考虑次数与重复各自的优缺点。
假设在缓冲区里有如下文字:
Delete more than one word
我们想把这段文字改为“Delete one word”,也就是说,要像这段文字里所讲的那样删除两个单词。
我们的3 种选择d2w、2dw 或者dw. 都是3 次按键,不过哪一种最好呢?
根据我们的讨论,d2w 和2dw 是相同的,在执行完两者中的任一个后,我们可以按u 键撤销,这样两个被删除的单词又会回来。或者,我们不是用撤销,而是用.命令重复执行它,这就会删除后面的两个单词。
对于dw. 的情形,按u 或. 的结果会有细微的差别。这里的修改是dw,即删除一个单词。因此,如果想恢复这两个被删除的单词,必须撤销两次,按uu(或者,如果你愿意,也可以按2u)。按. 则只删除后面的一个单词,而不是两个。
现在假设我们原本是想删除3 个单词,而不是2 个。由于判断出了点差错,我们执行了d2w 而不是d3w,那接下来怎么做?我们不能使用. 命令,因为那会总共删除4个单词。因此,我们或是先撤销而后修正次数(ud3w),或是继续删除下一个单词(dw)。
现在考虑另一种方案,如果我们在第一处地方用的是dw. 命令,那么我们只要再多重复一次. 命令就行了。因为我们最初的修改只是简单的dw,因此u 命令和. 命令都具有更细的粒度,每次只作用于一个单词。
现在假设我们想删除7 个单词,我们可以运行d7w,或是dw......(即dw 后面跟6 次. 命令)。计算一下按键的次数,哪个命令胜出是很显而易见的。不过你真地确信自己数对了次数吗?计算次数很是讨厌,因此我宁愿按6 次. 命令,也不愿意只为减少按键的次数,
而浪费同样的时间去统计次数。如果我多按了一次. 命令怎么办?没关系,只要按一次u 键就可以回退回来。
只要必要的时候使用次数
假设我们想把文字“I have a couple of questions”改为“I have some more questions”
在此场景中,使用. 命令的意义不大,我们可以删除一个单词,然后再用. 命令删除另一个,但随后我们还得切换到插入模式(例如,使用i 或cw)。对我来说这么做很不顺手,我反而更愿意用次数。
使用次数的另一个好处是:它保留了一个干净、连贯的撤销历史记录。完成这次修改后,我们按一下u 键就可以撤销整个修改。
删除周边,修改内部
假设,我们想删除下句中的单词“excellent”,此时可以用daw 命令:
这条命令会删除此单词,外加一个空格,因此结果会很干净。如果我们用的是diw的话,那删完后就会有两个连在一起的空格,这或许并不是我们想要的。
现在假设我们是想把此单词改成另外一个单词,这次可以用ciw 命令:
ciw 命令只删除该单词,而不删除其前后的空白字符,随后它会进入插入模式,这刚好是我们想要的效果。如果用的是caw 的话,那最后两个单词就会连在一起,变成“mostadjectives”。虽然这很容易修正,但如果一开始就能避免此问题,那岂不是更好么。
一般来说,d{motion} 命令和aw、as 和ap 配合起来使用比较好,而c{motion}命令和iw 及类似的文本对象一起用效果会更好。
菜鸟vimer成长记——第2.1章、normal模式的更多相关文章
- 菜鸟vimer成长记——第2.0章、模式初探
首先,其他的文本编辑器只有一种模式,就是插入模式.而vim一下子颠覆了我们的世界观——有好多模式.这个是思维上的切换,很难也很重要!!! 其次,Vim 提供一个区分模式的用户界面.也就是说在不同的模式 ...
- 菜鸟vimer成长记——第2.4章、cmd-line模式
cmd-line模式又有3个类型:Ex 命令(ex commands).查找模式(Search patterns).Filter 命令(Filter commands).本文主要重点的是Ex 命令和S ...
- 菜鸟vimer成长记——第4.2章、编程插件
简介 这部分的插件是与编程相关的插件.主要涉及两大块:所有编程语言通用的插件,以及各个语言独有的插件.插件的数量和合理性,这可能是一个不断累积和修正的过程. 个人感觉,现在比较适合sh,html,ma ...
- 菜鸟vimer成长记——第4.1章、通用插件
简介 关于插件的分类,此系列只会简单的区分为通用插件和编程插件.通用插件的意思是,不基于任何编程语言都可以使用的插件.编程插件,是针对于编程习惯,或者说是针对于某种语言的插件. 计划中,是先把基本常用 ...
- 菜鸟vimer成长记——第4.0章、Vim插件管理利器-Vundle
定义 Vundle是vim bunler和简称,它是一个vim插件管理器. Vim本身缺乏对插件的有效管理,安装插件并配置.vimrc文件非常不便.gmarik受到Ruby的bunler的启发,开发了 ...
- 菜鸟vimer成长记——第2.3章、insert模式
大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些. 如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成. 目的 掌握inser模式下常用操作的语法和概 ...
- 菜鸟vimer成长记——第2.2章、visual模式
vi是没有可视模式的.然而大多数编辑软件都都是有可视模式.所以我猜测vim是几乎迫于无奈才有了visual模式. 个人建议,能不用就不用.这样能直接在头脑里处理好文本,锻炼文本处理能力,同时能转变过来 ...
- 菜鸟vimer成长记——目录
菜鸟vimer成长记——第0章.我眼中的vim学习 菜鸟vimer成长记——第1章.统一概念 菜鸟vimer成长记——第2.0章.模式初探 菜鸟vimer成长记——第2.1章.normal模式 菜鸟v ...
- 菜鸟vimer成长记——第0章、我眼中的vim学习
这是一系统总结vim的学习文章,记录我自己学习vim的过程和感悟.与此同时也想分享出来给大家,欢迎大家互相讨论和学习. 在这里假设你们对vim已经有了一些基本的认识或者说已经使用过几个月的vim.该系 ...
随机推荐
- linux rz上传文件及出错解决方案
在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...
- 【转载】 C语言命令行小猪佩奇
// ASCII Peppa Pig by Milo Yip #include <math.h> #include <stdio.h> #include <stdlib. ...
- html端输入数据,利用qrcode.js生成打印二维码
在前端页面中导入qrcode.js(下载)和jquery.js(下载) index.html <script> function print() { var textbox1 = $('i ...
- Python成员运算符
Python成员运算符 其他语言没有,是否包含运算符,主要应用在字符串或者集合中 测试实例中包含了一系列的成员,包括字符串,列表或元组. #使用场景01:字符串是否包含另外一个字符串? str01 = ...
- jetbrains全家桶永久激活大法
不得不说jetbrains的产品真的挺好用的,比如耳熟能详的idea和pycharm等等,但正版的费用真的非我等学生党所能承担,网上也有一些注册码的教程,原理是通过服务器进行注册认证,但貌似目前用的比 ...
- HBase TableExistsException: hbase:namespace
这个报错一般存在于独立安装Zookeeper集群中. 报这个错的操作时这样的, 先停掉了了Hbase formatZK后重启Hbase 启动hbase shell 后HMaster挂掉,看log里就有 ...
- 安装mysql中遇到的问题1
我的debian7之前安装了mysql-server,是通过apt安装的,后来我卸载掉, 然后用whereis mysql查找, 把所有关于mysql的目录删除掉,包括带mysqld的目录及文件. 重 ...
- 学习python第三天之多行函数
多行函数:(聚合函数/分组函数) 解释:多条数据进入,单条结果出来(多进单出) 1).max(obj):最大值 2).min(obj):最小值 3).sum(num):求和 4).avg(num):求 ...
- 4-1 R语言函数 lapply
#lapply函数 #可以循环处理列表中的每一个元素 #lapply(参数):lapply(列表,函数/函数名,其他参数) #总是返回一个列表 #sapply:简化结果 #结果列表元素长度均为1,返回 ...
- 记录一下mac上码云的使用
项目比较多的时候用第三方的托管平台管理自己的代码还是挺不错的,记录一下码云的基本使用 分两部分进行说明: 一 :怎么上传自己本地的代码到码云.(方式,通过终端输入命令行) 具体的步骤: 1 :首先得在 ...