动词+名词
名词
h 前 j 下 k 上 l 后
w 下一个单词前
} 下一个段落
$ 行尾
动词
y 复制
d 删除
c 剪贴,进入插入模式
组合
y2h 向左复制两个字符 y2w 向右复制两个单词 y$复制到行尾 yy复制当前行 y2j从当前行复制两行,共计三行
d2h 向左删除两个字符 d2w 向右删除两个单词 d$ 删除到行尾部 dd 删除当前行 d2j删除三行
c2j 剪贴3行 cc 剪贴当前行
文本(光标要激活某些模式比如)
i+obj(内部文本)
a+ob(外部文本)
<div>
<h1>我是标题</h1>
<p>我是段落一</p>
<p>我是段落二</p>
</div>
1.光标在h1的文字中间 dit 删除“我是标题”
2.光标在h1的文字中间dat 删除h1和内容
3.光标在div上 dit删除"div",留下了<>
4.光标在div上 dat 删除div及其内部的所有子元素
5.光标在div上 di<,删除<>里的所有内容,保留<>
看代码
文件跳转: gg文件开头 G 文件最后一行 nG跳转到某一行
滑动滚动条: ctr + e 向下滚动一行 ctr + d 向下滚动半屏 ctr + f 向下滚动一屏
ctr + y 向上滚动一行 ctr + u 向上滚动半屏 ctr + b 向上滚动一屏
相对于窗格: H跳到屏幕的顶部,M跳到屏幕的中间 L跳到屏幕的最下
置顶: zt把当前行放在窗口的顶部 zz把当前行放到屏幕的中间
修改代码
当前行内的操作:
0跳到当前行的第一个字符 ^当前行的第一个非0字符(或者0w)
$当前行的结尾
w向后一个单词
b向前一个单词
e向后一个单词的结尾
插入文本
i在当前字符的前面插入
a在当前的字符后面append
s删除当前字符并在该位置插入
删除字符(在编辑模式下)
ctr + h 删除一个字符
ctr + w 删除一个单词
ctr + u 删除一整行
删除行(预览模式)
dd
搜索
/向后搜索
?向前搜索
n重复上次上一次搜索(向下)
N向上
批量替换字符
/let 找到匹配的字符 cw把当前单词(let)保存到寄存器中并进入编辑模式,输入const并退出编辑模式
按n找到下一个匹配的字符,按.执行上一个操作
const one = "1";
const two = "2";
const three = "3";
<script>
function swap(arr, i, j) {
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
function partArr(arr, left, right) {
const pivot = arr[left];
let index = left + 1;
for (let i = index; i <= right; i++) {
if (arr[i] < pivot) {
swap(arr, i, index);
index++;
}
}
swap(arr, left, index - 1);
}
function partArr2(arr, left, right) {
const pivot = arr[right];
let index = left;
for (let i = left; i < right; i++) {
if (arr[i] < pivot) {
swap(arr, i, index);
index++;
}
}
swap(arr, right, index);
}
function partArr3(arr, left, right) {
const index = parseInt((left + right) / 2);
const pivot = arr[index];
let i = left;
let j = right;
while (i <= j) {
// >= pivot
while (arr[i] < pivot) {
i++;
}
// <= pivot
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
swap(arr, i, j);
i++;
j--;
}
}
return i;
}
const arr = [3, 2, 2]; //[6, 11, 3, 9, 8]; // [5, 3, 2, 6, 2]
partArr3(arr, 0, arr.length - 1);
console.log(arr);
</script>
https://www.imooc.com/learn/1129