常用的linux命令-vim

  1. 云栖社区>
  2. 博客>
  3. 正文

常用的linux命令-vim

技术小甜 2017-11-23 17:53:00 浏览832
展开阅读全文


vim filename


插入模式
esc

退出保存
:w [filename]输入 「w filename」将文章以指定的文件名filename保存
:wq保存退出
:q!不保存退出
:x保存退出
zz退出保存
:e!不保存并载入该文件

命令模式

i进入插入模式,从光标前一个位置开始输入文件;

a进入插入模式,从光标后面一个位置开始输入文件;

o插入新的一行,从行首开始输入文字

移动光标

h/j/k/l「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格

在 vi 中连接行

J  将下一行连接到当前行的末尾

nJ  连接后面 n 行

光标放置与屏幕调整

H  将光标移动到屏幕的顶行

nH  将光标移动到屏幕顶行下的第 n 行

M  将光标移动到屏幕的中间

L  将光标移动到屏幕的底行

nL  将光标移动到屏幕底行上的第 n 行

ctrl+y 将屏幕下滚一行

ctrl+u 将屏幕上滚半页

ctrl+d 将屏幕下滚半页

ctrl+b 将屏幕上滚一页

ctrl+f 将屏幕下滚一页

ctrl+l 重绘屏幕

z-return 将当前行置为屏幕的顶行

nz-return 将当前行下的第 n 行置为屏幕的顶行

z.  将当前行置为屏幕的中央

nz.  将当前行上的第 n 行置为屏幕的中央

z-  将当前行置为屏幕的底行

nz-  将当前行上的第 n 行置为屏幕的底行

0数字「0」:移到文章的开头

G「G」:移动到文章的最后。

$$」:移动到光标所在行的“行尾”

^「^」:移动到光标所在行的“行首”

w「w」:光标跳到下个字的开头

e「e」:光标跳到下个字的字尾

b「b」:光标回到上个字的开头

#l「#l」:光标移到该行的第#个位置,如:5l,56l

:#「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

:set num显示行号

:set nonum取消行号

删除文字

x每按一次,删除光标所在位置的“后面”一个字符

#x例如,「6x」表示删除光标所在位置的“后面”6个字符

X大写的X,每按一次,删除光标所在位置的“前面”一个字符

#X例如,「20X」表示删除光标所在位置的“前面”20个字符

dd删除光标所在行(实际上是剪切)

#dd从光标所在行开始删除#行(实际上是剪切)

dw删除单词(包括其后空格)(需要将光标定位于单词开头)(实际上是剪切)

dw 剪切单词(不包括其后空格).

复制

yw将光标所在之处字符

#yw复制#个字到缓冲区

yy复制光标所在行到缓冲区。

y$复制光标所在位置到行尾

y^复制光标所在位置到行首

#yy「6yy」表示拷贝从光标所在的该行“往下数”6行文字

p将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能

yw 复制一个单词(包括空格)

ye 复制一个单词(不包括空格)

Y 复制一整行(包括行尾换行符),不同于D删除到行尾(不包括换行符)

在插入模式下直接粘贴,剪贴板上的每个字符都相当于手动输入,再加上vim的自动缩进,所以缩进就会累积,如果vim还支持自动连续注释,每行代码都自动加上了注释,解决办法在粘贴前先设置进入粘贴插入模式,即不会自动缩进和连续注释,运行命令:set paste

然后执行粘贴操作.但是在粘贴插入模式下代码是不会自动按格式缩进的,需要使用nopaste设置回来:set nopaste.

也可以在.vimrc中设置切换的快捷键,比如设置F9,则可以在.vimrc中加入:set pastetoggle=<F9>

这样直接在插入模式按F9就会在”-- 插入 --”模式和”-- 插入(粘贴) --”模式中切换


命令行模式下输入”6,9 co 12”,复制6,9行到12行

命令行模式下输入”6,9 m 12”,剪切6,9行到12行.

在6行做标记ma,移动光标到当前行,输入y'a会复制当前行到标记a之间的文本.输入d'a会删除a行到当前行.

单行删除:1(待删除行)d

多行删除:1,10d

光标移到起始行,输入ma; 光标移到结束行,输入mb; 光标移到粘贴行,输入mc; 输入:'a,'b co 'c 把 co 改成 m 就成剪切了.

删除多行的:5, 9 de

替換(substitute)

:[range]s/pattern/string/[c,e,g,i]

range指的是範圍,1,7 指從第一行至第七行,1,$ 指從第一行至最後一行,也就是整篇文章, 也可以 % 代表 % 是目前編輯的文章,# 是前一次編輯的文章.

pattern就是要被替換掉的字串,可以用 regexp 來表示.

string將 pattern 由 string 所取代.

c confirm,每次替換前會詢問.

e 不顯示 error.

g globe,不詢問,整行替換,如果没有这一项,只会替换每行的第一个

. 点号表示在当前行查找(这是默认的range).

iignore 不分大小寫.

:nohl可以取消高亮

[實例] :%s/Edwin/Edward/g

這樣整篇文章的 Edwin 就會替換成 Edward.

注意: [c,e,g,i] 这几个可以合起来用,如cgi 表示不分大小寫,整行替換,替換前要詢問是否替換

替换命令

r「r」:替换光标所在处的字符,替换完之后还是命令模式

R「R」:替换光标所到之处的字符,直到按下「ESC」键为止。


替换的应用之多行注释:

:20,30 s/^/\/\//g 2030行用//注释掉,如果加是gc,则替换每个时都要提示

:.,30 s/^/#/g 当前行(.表示当前行)30行注释掉,如果没有g,则替换第一个

:20,30 s/^\/\///g 取消注释,如果最后不是没有g,只有c,提示且只会替换第一个

:4,10 s/^[^s]\+// 去掉行首的空白字符

replace with to (y/n/a/q/l/^E/^Y) ,输入y表示替换当前这个,n表示这个不要替换,a表示全部替换,q表示退出,不替换了,l表示把当前这个替换后就退出,^E(ctrl+e,好像大小写都可以)表示向下滚动一行,^Y表示向上滚动一行.

在s前面加上范围,比如:1,5s/from/to表示替换1到5行的from,在vim中有些字符可以很方便的表示一些特殊行,比如.表示当前行,$表示最后一行,第一行当然就是1了.所以我们可以用:.s/from/to命令替换当前行的from,用:.,$s/from/to替换从当前行到结束行的每行的第一个匹配的from.from 和to可以使用正则表达式.如:3,10s/^/Add to line Head/gc 将第3到10行前面插入字符"Add to line Head" 并询问%s/22$/BB/g 替换所有在行尾处出现的22为BB.

回复上一次操作

u如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

U撤销对当前行的所有操作

ctrl+r重做

修改

cw「cw」:更改光标所在处的字到字尾处

c#w例如,「c3w」表示更改3个字

查找字符

/「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止

?先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

set hlsearch "打开高亮搜索

set nohlsearch "关闭高亮搜索

nohl "只取消掉当前的搜索高亮

map <C-n> :nohl<cr>只需要按Ctrl-n取消查找后的高亮显示

定义标记

% 跳转到相配对的括号

gD 跳转到局部变量的定义处

'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"

mx 设置书签,x只能是a-z的26个字母

`x 跳转到书签处("`"是1左边的键)

> 增加缩进,"x>"表示增加以下x行的缩进

< 减少缩进,"x<"表示减少以下x行的缩进

{ 跳到上一段的开头

} 跳到下一段的的开头

( 移到这个句子的开头

) 移到下一个句子的开头

[[ 跳转至上一个函数(要求代码块中'{'必须单独占一行)

]] 跳转至下一个函数(要求代码块中'{'必须单独占一行)

C-] 跳转至函数或变量定义处

C-O 返回跳转前位置

C-T 同上

nC-T 返回跳转 n 次

0 数字0,跳转至行首

(单引号)'a访问光标所在行的行首

:marks可以看到所有的标记

gg:跳到文档开头

G:跳到文档末尾

0:跳到行的开头

CTRL+O跳到一个老地方(或双击 " 键)

CTRL+L跳到一个新地方


vim中执行shell命令,有以下几种形式

1):!command

不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容

2):r !command

shell命令command的结果插入到当前行的下一行

例如

:r !date,读取系统时间并插入到当前行的下一行.

3):起始行号,结束行号!command

将起始行号和结束行号指定的范围中的内容输入到shell命令command处理,并将处理结果替换起始行号和结束行号指定的范围中的内容.

4):起始行号,结束行号 w !command

将起始行号和结束行号所指定的范围的内容作为命令command的输入.不会改变当前编辑的文件的内容.


vim基本命令

其它命令:
写完命令行,在最后加上$,将命令挂到后台运行.
正在运行指令时,按Ctrl+Z,将进程挂到后台并暂停.
bg 命令在后台运行被暂停的作业.
fg 将后台作业放到前台运行.
objdump命令可以用来查看链接后的输出可执行文件的内容.

关于c++编辑:
#include 指令的两种使用形式:
(1) 尖括号告诉编译器在一个或者多个标准系统目录中找到文件/usr/include /usr/local/include;
(2) 双引号意味着首先搜索本地目录(如果在本地目录找不到,再到标准系统目录中找),但是具体搜索哪个目录依赖于编译器。
有些编译器搜索源代码文件所在目录,有些编译器搜索当前工作目录,有些搜索工程文件所在目录。gcc的本地目录,默认情况下就是源码(.c文件)所在目录,当然也可以用-I指定本地目录(可以用多个-I指定多个本地目录)
gcc默认就会搜索/usr/include /usr/local/include的,你还可以设置环境变量CFLAGS=-I /somewhere $CFLAGS增加搜索路径.

其它:
文件结束符----EOF














本文转自jetyi51CTO博客,原文链接: http://blog.51cto.com/jetyi/796626,如需转载请自行联系原作者





网友评论

登录后评论
0/500
评论
技术小甜
+ 关注