hjkl光标四方向

排序前
[A]a
[B]b
[C]c
[A]a1
[B]b1
[C]c1
[A]a2
[B]b2
[B]b3
[C]c3
[XA]xa
[C]c4

[XA]xa1

排序后
[A]a
[A]a1
[A]a2
[B]b
[B]b1
[B]b2
[B]b3
[C]c
[C]c1
[C]c3
[C]c4
[XA]xa
[XA]xa1
好玩的--
其他编辑器--软件怎么处理?
https://www.zhihu.com/question/27478597


引入主题:提问Q为什么 :wq! :wq 二者结果一致?
-1-引入nokia的一款手机 指出 vi_vim的表观理念:摆脱鼠标且尽量使用键盘字母键和数字键,仅依靠ESC
设计特征:强化词和行的地位,词和行为常用“操作元”
0- vi /var/www/w.php
vim /var/www/w.php
界面一样
注意:执行该命令后,怎么退出?
进入insert--->ESC--->:q


1-通过ESC切换单个字母的编辑命令
a //在当前光标位置的右边添加文本
i //在当前光标位置的左边添加文本
A //在当前行的末尾位置添加文本
I //在当前行的开始处添加文本(非空字符的行首)
O //在当前行的上面新建一行
o //在当前行的下面新建一行
R //替换(覆盖)当前光标位置及后面的若干文本
J //合并光标所在行及下一行为一行(依然在命令模式)

x //删除当前字符
nx //删除从光标开始的n个字符
dd //删除当前行
ndd //向下删除当前行在内的n行
u //撤销上一步操作
U //撤销对当前行的所有操作




2-强化练习
/vpser //向光标下搜索vpser字符串
?vpser //向光标上搜索vpser字符串
n //向下搜索前一个搜素动作
N //向上搜索前一个搜索动作

3-(特色)跳至指定行
n+ //向下跳n行
n- //向上跳n行
nG //跳到行号为n的行
G //跳至文件的底部2017/3/242017/3/24

4-(常用)行号
:set nu //显示行号
:set number //显示行号
:set nonu //取消显示行号
:set nonumber //取消显示行号

6-常用功能中,其他编辑器逊色的vi_vim出色之处---高效
高效的复制粘贴
yy //将当前行复制到缓存区,(待well验证---->)也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
nyy //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
yw //复制从光标开始到词尾的字符。
nyw //复制从光标开始的n个单词。
y^ //复制从光标到行首的内容。 VPS侦探
y$ //复制从光标到行尾的内容。
p //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。
P //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。

:s/old/new //用new替换行中首次出现的old
:s/old/new/g //用new替换行中所有行中首次出现的old
:n,m s/old/new //用new替换从n到m行里所有的old
:n,m s/old/new/g //用new替换从n到m行里所有的old
:%s/old/new/g //用new替换当前文件里所有的old
:%s/old/new //用new替换当前文件里所有行中首次出现的old

注意和u结合,撤销前一步的操作(或前一步的前一步)操作

我们用自然语言的方式来理解一些简单的命令序列。
动词+修饰词(可选)+名词
d(delete)3w(word) 删除三个词--->(待验证)
d(delete)5j(lines) 删除1+5行(包括当前行)
c(hange)w(word) 替换一个词--->(待验证)
d(delete)t(till){ 删除直到{字符之前
d(delete)i(inside)p(paragraph) 删除一个段落
z(scroll)t(top) 当前光标行滚动到顶部
z(scroll)b(bottom) 当前光标行滚动到底部

直接的操作前面可以加数字修饰
33G(Goto) 跳转到33行
6j(down) 光标下移6行

7-文件保存 命名 管理
Q为什么 :wq! :wq 二者结果一致?


:w filename 另存为filename;
:q 执行失败--->提示-已经修改,但是尚未保存,+!强制不保存退出

:w 保存;
:wq! 保存退出;
:wq 保存退出;--->疑问

:wq! filename 注:以filename为文件名保存后退出;
:q! 不保存退出;
:x 应该是保存并退出 ,功能和:wq!相同
ZZ:若文件没有更动,则不保存离开,若文件已经被更改过,则保存后离开


:e otherfilename //编辑文件名为otherfilename的文件。 相对路径

8-编码
:set spell 拼写检查
:set scrolloff=3 滚动
:set cursorline 水平线
:set incsearch 增量搜索
[A]a
[B]b
[C]c
[A]a1
[B]b1
[C]c1
[A]a2
[B]b2
[B]b3
[C]c3
[XA]xa
[C]c4
[XA]xa1

:1,13!sort
:.,+12!sort
:%sort



22]a
123]b
457]c
22]a1
123]b1
457]c1
22]a
123]b
457]c
22]a1
123]b1
457]c1
22]a2
123]b2
123]b3
457]c3
9]xa
457]c4
9]xa1
22]a2
123]b2
123]b3
457]c3
9]xa
457]c4
9]xa1
去重
:%sort u
:sort n

1 j 124.63 172 0.72
2 e 99.67 172 0.58
3 r 93.34 188 0.50
4 r 41.86 188 0.22
5 a 26.68 188 0.14
6 e 18.25 188 0.10
7 u 18.25 188 0.10
8 t 11.89 164 0.07
9 m -16.55 156 -0.11
10 q -16.19 152 -0.11
11 v -86.73 152 -0.57
12 b -213.45 152 -1.40

:sort /\d/ r
:%sort /\d/ r

:sort /[a-z]/ r



-r 是降序排序
-n 是按数字大小排序
-k,表示根据那个字段排序,4.1,表示第4列第一个字符开始 ,5表示到第5个字段为结束
-t 后面跟分隔符,缺省是空格


-c --check 只检查文件是否已排序,而不进行排序。

-m --merge 合并已经排好序的文件。

-o --output=FILE 将排序结果保存到指定文件中,通常用于将结果保存到原文件中(这种情况用输出重定向不能完成)。

-s --stable sort命令默认是不稳定的排序,此选项使排序结果稳定。

-u --unique 对排序键值相同的行只保留一行。默认情况下,sort | uniq等效于sort -u,但是在指定了排序key时则不同。

-b --ignore-leading-blanks 忽略前导空格。

-R --random-sort 随机排序,每次运行的结果均不同。

-n --numeric 按字符串的数值来比较。

-r --reverse 倒序排序。

-t --field-separator=SEP 设置字段分隔符,默认的分隔符是non-blank to blank transition。

-f --ignore-case 开启此选项则忽略大小写进行比较。

然而,有可能在Linux中,默认情况下已经是忽略大小写的排序了,这是因为locale的原因。sort命令的帮助中有如下警告:

WARNING The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.
sort命令会根据当前的locale来决定一些字符串的比较结果,这样,在不同的机器中,即使输入数据相同,也有可能因为locale不同而导致排序结果不同。因此,如果排序结果不符合预期的话,不妨echo $LC_ALL看看是否为C,如果不是,可以执行export LC_ALL=C。

-k --key=KEYDEF 指定排序key,格式为F[.C][OPTS][,F[.C][OPTS]]。

例如sort -t: -k2,2n -k4,4nr input.txt表示以冒号为分隔符,首先以数值方式比较第二列,如果相同,再以逆序数值方式比较第四列,列数是从1开始的。而sort -k2.1,2.2 input.txt表示比较第二列的前两个字符来排序。

key的结束位置默认为行尾,因此sort -k2 input.txt表示的是比较第二列开始到行尾的字符串,而不仅仅是第二列。因此,如果需要,尽量定义多个key,而不是一个跨列的key。

reference
http://www.skorks.com/2010/05/sort-files-like-a-master-with-the-linux-sort-command-bash/

alan@alan-ubuntu-vm:~/tmp/sort$ sort letters.txt


$ nl --help

Usage: nl [OPTION]... [FILE]...

Write each FILE to standard output, with line numbers added.

With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.

-b, --body-numbering=STYLE use STYLE for numbering body lines

-d, --section-delimiter=CC use CC for logical page delimiters

-f, --footer-numbering=STYLE use STYLE for numbering footer lines

-h, --header-numbering=STYLE use STYLE for numbering header lines

-i, --line-increment=NUMBER line number increment at each line

-l, --join-blank-lines=NUMBER group of NUMBER empty lines counted as one

-n, --number-format=FORMAT insert line numbers according to FORMAT

-p, --no-renumber do not reset line numbers for each section

-s, --number-separator=STRING add STRING after (possible) line number

-v, --starting-line-number=NUMBER first line number for each section

-w, --number-width=NUMBER use NUMBER columns for line numbers

--help display this help and exit

--version output version information and exit

By default, selects -v1 -i1 -l1 -sTAB -w6 -nrn -hn -bt -fn.

CC are two delimiter characters used to construct logical page delimiters,

a missing second character implies :. Type \\ for \. STYLE is one of:

a number all lines

t number only nonempty lines

n number no lines

pBRE number only lines that contain a match for the basic regular

expression, BRE

FORMAT is one of:

ln left justified, no leading zeros

rn right justified, no leading zeros

rz right justified, leading zeros

 

 在编辑模式下输入

ngg 或者 nG

n为指定的行数(如25)

25gg或者25G 跳转到第25行.

在命令模式下输入行号n

: n 跳转至第n行

如果想打开文件即跳转

vim +n FileName

查看当然光标所在的行

Ctrl+g

 

 

删除全文

删除

vim如何删除文件中所有东西

vim删除文件中所有内容的方法:

(:代表要切换到命令模式输入:之后的命令)

(1):%d

不管光标在哪里,删除所有

(2)gg dG

gg的意思是光标切换到第一行