【技能提高】提高shell的输入效率

时光毁灭记忆、已成空白 提交于 2019-12-12 13:49:20

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

1、vim ~/.vimrc 进入配置文件

如果不知道vimrc文件在哪,可使用 :scriptnames 来查看

set nu      #行号

set tabstop=4  #一个tab为4个空格长度

set ai  #设置自动缩进

syntax on   #高亮

 

2、基本

空格键 向右移动一格

x 删除后面的字符 X 删除前一个字符  删除3个字符就是3x  

dd:删除一行   D 删除到行尾 

caw:改写单词  c 相当于 d 变为编辑模式

J:删除换行符,使下一行并上来。     nJ:连接后面的n行

u:撤销上一次操作      U:撤销当前行的所有修改

ctrl+r:对撤消的撤消

i 在光标前插入

I 在行首插入 
a 在光标后插入

A 在行末插入

o:在当前行的下面另起一行,并变为插入模式

O:在当前行上面另起一行,变为插入模式

Ctrl+o:临时变成命令模式(一次而已)

:e!:放弃更改,然后相当于重新打开

:help:帮助,可用ZZ退出帮助窗口

vim中Nyy可以复制光标后的N行。有时我们不容易得出行数,这时可以用做标记的方法来制定复制范围: 

  1. 在开始行上输入ma作一个标记a 

  2. 移动到结束行,输入y'a会复制当前行到标记a之间的文本。d'a会删除。 

或者是v进入可视模式,再13G跳转到相应行,y即可。

:10,20y    回车即可,相应的删除也是如此     :10,20d     (此方法比上面两种方法更简单)

:10,20 m 30    把10行到20行的内容,剪切到30行之后

:10,20 co 30   把10行到20行的内容,复制到30行之后

将光标放在 { 处,然后输入v%就可以把大括号中内容选定

如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个"("前。

ctrl +n 自动补全 ctrl + p 也一样

:ab hw hello world  用一个缩写字符串代替一个长的字符串,此处用 hw 代替 hello world

%: 移动到与制匹配的括号上去(),{},[],<>等

' 移动到上一次的修改行

fx 向右跳到本行字符x处(x可以是任何字符)
Fx 向左跳到本行字符x处(x可以是任何字符)
tx 和fx相同,区别是跳到字符x前
Tx 和Fx相同,区别是跳到字符x后

# 到与当前单词相同的上一个单词上, * 到与当前单词相同的下一个单词上

如果你要重复键入一个短语或一个句子, 也有一种快捷的方法。Vim有一种记录宏的机制。你键入"qa"开始把一段宏记录入寄存器变量`a'中。
按下来你可以象平常一样键入你要的操作, 只是这些操作都会被Vim记录进它命名为`a'的宏中, 再次再下"q"键, 就结束了宏`a'的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有26个可用的寄存器供你记录宏。 使用宏你可以重复多个不同的操作。而不仅仅是插入文本了。如果你要进行某种重复的操作, 记着要用这一招呀。

:abbr hte the

:abbr hw Hello World

输入先面的单词时,自动用后面的替换。

 

3、移动:

b、3b、w、3w:向前\后移动几个单词,标点也算一个单词。相应的大写状态为不含标点,即只把空格和换行符作为单词间隔符。

$:移动到行尾  3$:移动到3行后的行尾

^:移动到行首,0也是

+:移到下一行的行首

-: 移到上一行的行首

f:搜索命令,小写时向后搜索(用来定位)如 fx:定位到下一个x上。   Fx:定位到上一个x上,重复时,可用;或,  不过 , 表示反方向

%:跳到相对应的括号上,编程时常用

33G:跳转到33行   此时按``可以返回到原来行

gg:文件头   G: 文件尾

30%:跳转到文件的30%处

"H"意为Home, "M"为Middle, "L"为Last.  当前屏幕的上中下位置,大小写皆可

Ctrl+G:显示当前位置

set number:设置显示行号,set nonumber:关闭显示

:set ruler 设置在窗口右下角显示行号,与上面的好处是,节省空间

ctrl+u\d  向上\下滚动半屏

ctrl+e\y  向上\下滚动一行

ctrl+b\f  向上\下滚动一屏  这个比较实用,记住。

zz:将当前行滚动于屏幕中间,方便查看上下文  zt置顶,zb置尾

/string  查找string,回车后,按n键可以跳到下一个,N上一个,另外按/键后,按上下键可以找到以前查找的记录,同样的 :也有记录

?/string 同上,默认向上查找

:set ignorecase 大小写无关

:set noignorecase 大小写敏感

* :查找下一个光标所在单词  #是查找上一个

:set hlsearch  高亮显示查找结果

:set nohlsearch  取消高亮

:nohlsearch  去掉当前显示的高完(一次性)

 `` 上次光标停靠的行

% 匹配到相应括号处

>>   向右移动本行一段距离     <<   向左移动本行一段距离    3<<    把下面3行(包括本行),向左移动一段距离     :20,30>>  把20行到30行向右移动一段距离

 

4、小幅改动:

:%s/str1/str2/g   替换每一行的 str1为 str2

:10,20s/str1/str2/g   替换从行10到行20之间的 str1为 str2

:10,$s/str1/str2/g   替换从行10到最后一行之间的 str1为 str2

:s/str1/str2/g   替换当前行的 str1为 str2

.  重复执行命令 

:10,$ w test2.cpp     取行10到最后一行内容,保存到test2.cpp

:r class/User.hpp    读取文件中的内容,插入到当前行的后面

dw:删除一个单词(光标后部分)  不如:daw实用    d4w:删除4个单词    d$:删除当前光标到行尾    d^:删除当前光标至行首       d换成c效果是一样的,只是操作完会变成insert模式   dnw: 删除N个单词   dnj: 向下删除n行      dnk: 向上删除n行 

X:删除左边的字符,相当于<-键,x删除当前字符  D:相当于d$  C:相当于c$  s:相当于c1  S:相当于cc

r:替换当前字符,但不会进入insert模式    3r:把后面3个字符替换掉    R:替换模式

.:重复上一次操作

v:进入Visual模式    V:进入可视行模式,比如 Vjjd 删除3行  Ctrl+v:可视块模式

P:粘贴至光标前    p:粘贴至光标后    3P:粘贴3次      "2p     粘贴最后第二次的删除的内容

yy:复制一行  yaw: 复制一个单词,光标在单词任意位置    ynw: 复制N个单词       ynj: 向下复制n行          ynk: 向上复制n行  

自动缩进:

:set cindent(所有的set都可以简写为se,虽然只节省了一个字符, 译者注) 需要注意的是cindent控制缩进量是通过shiftwidth选项的值, 而不是通过tabstop 的值, shiftwidth的默认值是8(也就是说, 一个缩进为8个空格, 译者注), 要改变默认的设置, 可以使用":set shiftwidth=x"命令, 其中x是你希望一个缩进量代表的空格的数目.

 { = 到前一个空行上
} = 到下一个空行上

 

 5、VIM的一些插件:

c.vim :如果是用root账号的,把文件复制到/usr/share/vim/vim70中解压没有用的,不存在 $HOME/.vim 这个目录,没办法,只能新建个目录,然后把压缩包cp到这个目录,再unzip即可。在 ~/.vimrc 中 写入 filetype plugin on 

 

:e!   返回上次保存后的状态

Ctrl+z:暂停vi,回到Unix提示符,再输入fg即可回到vi。

 ^回到行首,光标位于行首字母处;0回到行首,光标位于行首字母前。$回到行尾,光标位于行尾字母处。

nb:向前移动n个单词,nw:向后移动n个单词。光标位于单词的第一个字母处。 nw这个操作很慢,不知何故。 以空格、标点符号与单词的分界为分隔符。(几个连续的标点视为一个单词)

同样的,也可以使用nB,nW,只是这里只使用空格做为分隔符。

相换两个相邻字母的位置:x、p

s:删除一个字符,并进入编辑模式。 S:删除一整行,进入编辑模式,相当于cc。   ns:删除后面n个字符,并进入编辑模式。

~:更改字母的大小写,同时光标进入到下一个字符。  n~:把后面n个字母的大小写状态改变。

dw:删除单词后面部分     db:删除单词前面部分。  如果要删除整个单词(光标位于单词中间的话),可以 dbw\wdb

de:类似于dw,删除单词后面的部分(只删除到本单词结尾,dw会删除掉单词后面的空格)   dE:删除的范围包括标号在内的单词结尾。

e:相当于w,向后移动一个单词。不同的是,w移动到单词第一个字符上,e移动到单词最后一个字符上。  所以ea,可以给本单词追加内容。

D:d$ 的简写,同样的,C:c$的简写。

U:会恢复一整行原先的面貌,即最原始的样子。

Y:相当于yy,不同于D与C的操作方法。

.:重复上一个命令。

除了O/o,插入命令(A,a,I,i)接受数值参数,如:5Ihello,然后按ESE键。会在行首输入5个连接的hello

nr:替换后面n个字符。

nJ:合并下面的n行(从本行算起)。

ynl:向后复制n个字符。

e/E:到单词的结尾。

Ctrl+p重复上一次命令
Ctrl+a跳到第一个字符前
Ctrl+x同上但再按一次会从新回到原位置
Ctrl+b前移一个字符不删除字符情况下
Ctrl+h删除前一个字符
Ctrl+u删除提示符前的所有字符
Ctrl+w同上
Ctrl+d删除提示符后一个字符或exit或logout
Ctrl+e转到字符尾部
Ctrl+f后移一个字符
Ctrl+k删除提示符后全部字符
Ctrl+k取消
ctrl+r向前查找用过的命令
Ctrl+o Ctrl+y Ctrl+i Crtl+m这4个没搞清楚怎么用
<TAB> 命令补齐
CTRL-I 等同于按制表符<TAB>键
CTRL-W 不是删除光标前的所有字符, 它删除光标前的一个单词
CTRL-P 是recall出上一个命令 <===> CTRL-N 是recall出下一个命令
ESC-F 光标向前步进一个单词
ESC-B 光标向后步进一个单词
CTRL-M 等同于回车键
CTRL-O 等同于回车键
CTRL-V 使下一个特殊字符可以插入在当前位置, 如CTRL-V <TAB> 可以在当前位置插入一个<TAB>字符, 其ASCII是9, 否则一般情况下按<TAB>结果是命令补齐
CTRL-C 撤消当前命令行的编辑, 另起一行.
CTRL-S 暂时冻结当前shell的输入
CTRL-Q 解冻
ESC-c 使下一个单词首字母大写, 同时光标前进一个单词, 如光标停留在单词的某个字母上, 如word中的o字母上, 则o字母变大写. 而不是w
ESC-u 使下一个单词所有字母变大写, 同时光标前进一个单词, 同上, 如光标在o字母上, 则ord变大写, w不变.
ESC-l 同ESC-U, 但使之全变为小写.
把bash所有的ctrl组合键试了一遍,现总结如下(以下出现的所有键都是ctrl组合键):

1. U K Y
U将光标(不包括)以前的字符删除
K将光标(包括)以后的字符删除
Y将刚才删除的字符粘出来

2. D H
D将光标处的字符删除
H将光标前的一个字符删除

3. A E
A将光标移动到行首
E将光标移动到行尾

4. F B
F将光标向右移动一个字符的位置
B将光标向左移动一个字符的位置

5. N P
N下一个命令
P上一个命令

6. L
L清屏

7. R
R搜索以前输入过的命令

8. T
T将光标处的字符和光标前一个字符替换位置
基本功:
用上下键看命令的历史
左右键区修改内容
tab补齐命令名字或者目录,文件名字,不是唯一的多按2次,会出来列表
!ls 重复运行最后一条以’ls’开头的命令,如果先ls -l 然后ls -lcrt,那么!ls,相当于ls -lcrt
ls abc.txt
vi !$
第二行的vi !$相当于vi abc.txt,!$等于上一个命令的参数, ‘$’ 是根据上下文来说的最后一行,列等。
ctrl键组合
ctrl+a:光标移到行首。
ctrl+b:光标左移一个字母
ctrl+c:杀死当前进程。
ctrl+d:退出当前 Shell。
ctrl+e:光标移到行尾。
ctrl+h:删除光标前一个字符,同 backspace 键相同。
ctrl+k:清除光标后至行尾的内容。
ctrl+l:清屏,相当于clear。
ctrl+r:搜索之前打过的命令。会有一个提示,根据你输入的关键字进行搜索bash的history
ctrl+u: 清除光标前至行首间的所有内容。
ctrl+w: 移除光标前的一个单词
ctrl+t: 交换光标位置前的两个字符
ctrl+y: 粘贴或者恢复上次的删除
ctrl+d: 删除光标所在字母;注意和backspace以及ctrl+h的区别,这2个是删除光标前的字符
ctrl+f: 光标右移
ctrl+z : 把当前进程转到后台运行,使用’ fg ‘命令恢复。比如top -d1 然后ctrl+z ,到后台,然后fg,重新恢复
esc组合
esc+d: 删除光标后的一个词
esc+f: 往右跳一个词
esc+b: 往左跳一个词
esc+t: 交换光标位置前的两个单词。

###vimdiff高级用法

vimdiff tokyo1.txt tokyo2.txt
1、 vimdiff file1 file2  
终端下输入该命令进入vim,垂直分隔窗口进行比较  
  
2、 vimdiff -o file1 file2  
水平分隔窗口进行比较  
  
3、 ctrl+w (j,k,h,l)  
上下左右切换光标所在的窗口(括号中表示可以是其中之一,按下ctrl+w,放开ctrl再按j,k,h,l)  
  
4、 ctrl+w (J,K,H,L)  
上下左右移动光标所在窗口的位置  
  
5、 zo 和 zc  
打开折叠区 和 关闭折叠区  
  
6、 ]c 和 [c  
将光标移动到下一个不同区 和 上一个不同区  
  
7、 do 和 dp  
将光标所在不同区域同步为另一个文件该位置的内容 和 将光标所在不同区域内容同步到另一个文件该位置  
  
8、 :diffu[!]  
vim下更新当前比较窗口,比较状态下修改文件后,可调用该命令[中括号不为命令部分,如果加!表示如果外部修改了文件,则重新加载比较]  
  
9、 :diffo[!]  
vim下关闭当前窗口比较状态,如果加!则关闭所有窗口的比较状态  
  
10、:diffs file1  
vim下加入file1和当前光标所在窗口进行比较,水平分隔窗口  
  
11、:vert diffs file1  
vim下加入file1和当前光标所在窗口进行比较,垂直分隔窗口  
  
12、:difft  
vim下将光标所在窗口变为比较窗口

###🔱多行首行插入

:%s/^/#/ 
:%s/^/TAB/

:% s/^/\/\//g     在全部内容的行首添加//号注释
:2,50 s/^/\/\//g  在2~50行首添加//号注释
:2,50 s/^\/\///g  在2~50行首删除//号

###☋vim列模式

ctrl+v, 选择行
然后shift i,A,c 进行编辑
完成后,esc
所选的列已经更新

###☪vim分屏

:o . //打开当前的文件目录
:vsp //横向拆分
:sp //纵向拆分两个窗口

###多文件编辑

查看最近编辑的文件
:ls

最近文件上、下切换
:bp ## :bn

多文件分tab
:h tab-page
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!