Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4267|回复: 5
打印 上一主题 下一主题

vi vim 常用命令

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2017-9-30 10:37:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 java 于 2019-2-26 11:05 编辑

【yy】 复制光标所在的那一行
【nyy】 复制光标所在的向下n行

【p,P】 p为将已经复制的数据在光标下一行粘贴;P为将已经复制的数据在光标上一行粘贴
【u】 撤消上一个操作
【[Ctrl] + r】 多次撤消
【.】 这是小数点键,重复上一个操作

将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方
Vim 中的复制、删除的内容都会被存放到默认(未命名)寄存器中,之后可以通过粘贴操作读取默认寄存器中的内容。寄存器是完成这一过程的中转站,Vim 支持的寄存器非常多,其中常用的有 a-zA-Z0-9+“。
其中:0-9:表示数字寄存器,是 Vim 用来保存最近复制、删除等操作的内容,其中 0 号寄存器保存的是最近一次的操作内容。
a-zA-Z:表示用户寄存器,Vim 不会读写这部分寄存器
"(单个双引号):未命名的寄存器,是 Vim 的默认寄存器,例如删除、复制等操作的内容都会被保存到这里。
+:剪切板寄存器,关联系统剪切板,保存在这个寄存器中的内容可以被系统其他程序访问,也可以通过这个寄存器访问其他程序保存到剪切板中的内容。

查看指定寄存器的内容(将寄存器名称作为参数)

:reg [register_name]
如: :reg 0

要实现"将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方?"就很明了,只需要将内容复制到剪切板寄存器(+)中即可,其他程序便可以访问到了。
"+yy  // 复制当前行到剪切板
"+p   // 将剪切板内容粘贴到光标后面
"ayy  // 复制当前行到寄存器 a
"ap   // 将寄存器 a 中的内容粘贴到光标后面
二、复制多行
任务:将第9行至第15行的数据,复制到第16行


方法1:(强烈推荐)

:9,15 copy 16  或 :9,15 co 16
由此可有:
:9,15 move 16  或 :9,15 m 16 将第9行到第15行的文本内容到第16行的后面  






在vi和vim上查找字符串
/要搜索的字符串或者字符 如:查询"count"关键字  /count
查看下一个匹配呢?按下n(小写n)
跳转到上一个匹配呢?按下N(大写N)。
从文件的结尾往开始处搜索  ?count
关闭高亮: nohlsearch (no highlight search缩写) 简写:noh



vim配置c c++开发环境

回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
 楼主| 发表于 2019-2-25 16:25:17 | 只看该作者
vi/vim常用命令(命令状态下使用)
命令
功能说明
插入字符、行,执行下面操作后,进入编辑状态
a
进入插入模式,在光标所在处后面添加文本
i
进入插入模式,在光标所在处前面添加文本
A
进入插入模式,在光标所在行末尾添加文本
I
进入插入模式,在光标所在行行首添加文本(非空字符前)
o
进入插入模式,在光标所在行下新建一行
O
进入插入模式,在光标所在行上新建一行
R
进入替换模式,覆盖光标所在处文本
剪切、粘贴、恢复操作
dd
剪切光标所在行
Ndd
N代表一个数字,剪切从光标所在行开始的连续N行
yy
拷贝光标所在行
Nyy
N代表一个数字,复制从光标所在行开始的连续N行
yw
复制从光标开始到行末的字符
Nyw
N代表一个数字,复制从光标开始到行末的N个单词
y^
复制从光标开始到行首的字符
y$
复制从光标开始到行末的字符
p
粘贴剪切板的内容在光标后(或所在行的下一行,针对整行复制)
P
粘贴剪切板的内容在光标前(或所在行的上一行,针对整行复制)
u
撤销上一步所做的操作
保存、退出、打开多个文件
:q!
强制退出,不保存
:w
保存文件,使用:w file,将当前文件保存为file
:wq
保存退出
:new
在当前窗口新建一个文本,使用:new file,打开file文件,使用Ctrl+ww在多个窗口间切换
设置行号,跳转
:set nu
显示行号,使用:set nu!或:set nonu可以取消显示行号
n+
向下跳n行
n-
向上跳n行
nG
跳到行号为n的行
G
跳到最后一行
H
跳到第一行
查找、替换
/***
查找并高亮显示***的字符串,如/abc
:s
:s/old/new//,用new替换行中首次出现的old
:s/old/new/g,用new替换行中所有的old
:n,m s/old/new/g,用new替换从n到m行中所有new
:%s/old/new/g,用new替换当前文件中所有old


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
板凳
 楼主| 发表于 2019-2-26 15:41:10 | 只看该作者
本帖最后由 java 于 2019-2-26 17:22 编辑

vi中跳到文件的第一行和最后一行
由于vi编辑器不能使用鼠标,所以一个大文件如果要到最后一行只用键盘下键的话会是一个很痛苦的过程,还好有各种比较快捷的方法归我们使用:
1. vi 编辑器中跳到文件的第一行:
   a  输入 :0 或者 :1   回车
   b  键盘按下 小写 gg

2.vi 编辑器跳到文件最后一行:
   a 输入 : $   回车
   b 键盘按下大写 G
   c 键盘按 shift + g    (其实和第二种方法一样)




配对括号的查找

1、把光标放在标记有(、[或{处。

2、按%字符

3、此时光标的位置应当在配对的括号处

4、再次按%就可以跳回配对的第一个括号处。


回复 支持 反对

使用道具 举报

1272

主题

2067

帖子

7962

积分

认证用户组

Rank: 5Rank: 5

积分
7962
地板
发表于 2019-4-12 17:18:29 | 只看该作者
为了便于选取文本,VIM 引入了可视(Visual)模式。 要选取一段文本,首先将光标移到段首,在普通模式下按 v 进入可视模式,然后把光标移到段末。 需要注意,光标所在字符是包含在选区中的
v 进入字符可视化模式
V 进入行可视化模式
Ctrl+v 进入块可视化模式
块选择 Ctrl+v
在表格中删除指定列非常有用
用 v 命令进入的字符可视化模式(Characterwise visual mode)。文本选择是以字符为单位的。
用 V 命令进入的行可视化模式(Linewise visual mode)。文本选择是以行为单位的。
用 ctrl-V 进入的块可视化模式(Blockwise visual mode)。可以选择一个矩形内的文本。

G 从光标所在处选择到结尾
操作:
这时可以对所选的文本进行一些操作,
常用的(可视模式)命令有:
x或d 剪切(即删除,同时所选的文本进入剪贴板)
y 复制
r字符 所有字符替换为新字符
u U ~ 分别是所有字母变小写、变大写、反转大小写
“>”和“<" 将选中字符右移或左移 shiftwidth位置
当输入了命令以后,VIM 将回到普通模式,这时可以按 p 或 P 进行粘贴。普通模式下有关复制和粘贴的命令:
p或P 在当前位置粘贴剪贴板的内容,p 粘在光标所在字符后面,P 粘在前面。
d 与 D 的区别
d只删除选中的字符,而D删除选中字符所在行的所有字符, c 和 C , y 和 Y 同理
我们还可以利用可视化模式,来合并多行文本。 J 命令可以将高亮显示的文本内容合并为一行,同时以空格来分隔各行。如果不希望在行间插入空格,那么可以使用 gJ 命令。
使用 g? 命令,可以使用rot 13算法来加密高亮显示的文本。针对同一个文本再次执行加密命令,就可以进行文本解密。
在可视化模式下,按下 : 键就可以对选定范围进行操作。例如:我们先在可视化模式下选中文本,然后执行 :write block.txt 命令,就可以将文本块写入另一文件中。选择多行,然后执行 :sort 命令,则可以对选中的文本进行排序。
查看Visual Mode下的命令
:help v_, 例如使用 :help v_d 命令,可以得到关于在可视模式下进行删除操作的帮助信息。

回复 支持 反对

使用道具 举报

1272

主题

2067

帖子

7962

积分

认证用户组

Rank: 5Rank: 5

积分
7962
5#
发表于 2020-1-1 14:11:06 | 只看该作者
命令(命令行)模式(command mode)、插入(编辑)模式(Insert mode)和底行(一般)模式(last line mode)
1) 命令行模式command mode)
  控制屏幕光标的移动,字符、字或行的删除,移动复制某区段
                k、j、h、l——上、下、左、右光标移动命令。
                nG——跳转命令。n为行数,该命令立即使光标跳到指定行。
                Ctrl+G——光标所在位置的行数和列数报告。
                w、b——使光标向前或向后跳过一个单词。
                i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。
                cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。
                x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。
                yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。
                /string、?string——从光标所在处向后或向前查找相应的字符串的命令。

进入插入模式:
                [i] : 从光标当前位置开始输入文件
                [a] : 从目前光标所在位置的下一个位置开始输入文字
                [o] : 是插入新的一行,从行首开始输入文字
进入底行模式
                按[:]
2) 插入模式(Insert mode)
  只有在Insert mode下,才可以做文字输入,
                按「ESC」键可回到命令行模式。
3) 底行模式(last line mode)
  将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。


不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

常用命令:
退出保存文件:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)

回复 支持 反对

使用道具 举报

1272

主题

2067

帖子

7962

积分

认证用户组

Rank: 5Rank: 5

积分
7962
6#
发表于 2020-5-22 10:18:26 | 只看该作者
替换命令
常用命令示例:

#将当前行第一个a替换为b

:s/a/b/



#将当前行的所有a替换为b

:s/a/b/g



#将每行第一个a替换为b

:%s/a/b



#将整个文件的所有a替换为b

:%s/a/b/g



#将1至3行的第一个a替换为b

:1,3s/a/b/



#将1至3行的所有a替换为b

:1,3s/a/b/g
————————————————
版权声明:本文为CSDN博主「隔壁小白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cbaln0/java/article/details/87979056

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 05:08 , Processed in 0.062314 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表