超详细vim操作解析

使用#yum install -y vim-enhanced 来安装vim服务

一般模式下移动光标

Ctrl+b 往前移动翻页; Ctrl+f 往后移动翻页;

0(数字)/shift + 6   快速定位到行首; shift + 4    快速定位到行末



一般模式下复制粘贴

dd:剪切当前行 小写的p:黏贴在本行下面 大写的P:黏贴在本行上面

u:一次恢复一个操作

5dd:剪切当前行至5行 p:黏贴

5yy:复制当前行至5行 p:黏贴

v:可视化操作,根据自己的需求去复制或者剪切某些段落+字符



编辑模式



命令模式

单词搜索:

/dnsmasq :搜索一个dnsmasq的单词 使用“n” 向下查找,使用“shift+n”向上查找

查找替换:

:1,100s/dnsmasq/hello/g      :搜索1-100行内的dnsmasq单词并全部替换成hello

:1,100s/dnsmasq/hello/      :搜索1-100行内的dnsmasq单词并替换成hello(每行仅第一个出现的替换)

:1,$s/dnsmasq/hello/g      :搜索1-末行的dnsmasq单词并全部替换成hello

:1,$s#/etc/hosts#/tmp#g      :搜索1-末行的/etc/hosts并全部替换成/tmp

:set nu :显示行号      :set nonu :取消显示行号

:nohl      :取消显示高亮(不建议设置,当你搜索单词的时候显示不明显)

:x 和 :wq 的功能一样类似,当你编辑了一个文件使用任意一个都可以,如果只是打开,但没有编辑,使用:wq会更改mtime,而使用:x则不会!



vim实践

# cp /etc/dnsmasq.conf  /tmp/1.txt

(1) 分别向下、向右、向左、向上移动6个字符(6j 6l 6h 6k)。

(2) 分别向下、向上翻两页(分别按两次ctrl+f和ctrl+b)。

(3) 把光标移动到第49行(49G)。

(4) 把光标移动到行尾,再移动到行首(Shift+4, Shift+6)。

(5) 移动到1.txt文件的最后一行(G)。

(6) 移动到文件的首行(gg)。

(7) 搜索文件中出现的“dnsmasq”,并数一下该字符串出现的次数(/dnsmsq 然后按n)。

(8) 把从第1行到第10行出现的dnsmasq替换成dns(:1,10s/dnsmasq/dns/g)。

(9) 还原上一步操作(u)。

(10) 把整个文件中所有的etc替换成cte(:1,$s/etc/cte/g)。

(11) 把光标移动到第25行,删除字符串 “ly”(25G 然后按j向右移动光标找到"ly",按v选中,然后按x)。

(12) 还原上一步操作(u)。

(13) 删除第50行(50G dd)。

(14) 还原上一步操作(u)。

(15) 删除第37-42行的所有内容(37G 6dd)。

(16) 还原上一步操作(u)。

(17) 复制第48行的内容并粘贴到第52行下面(48G yy 52G p)。

(18) 还原上一步操作(u)。

(19) 复制第37-42行的内容并粘贴到第44行上面(37G 6yy 44G P)。

(20) 还原上一步操作(按u)。

(21) 把第37-42行的内容移动到第19行下面(37G 6dd 19G p)。

(22) 还原上一步操作(按u)。

(23) 把光标移动到首行,把第1行内容改为“#!/bin/bash”(先按gg,把光标定位到第1行,然后按字母A,进入编辑模式,同时>光标到行末尾,进行修改操作,完成后按ESC)。

(24) 在第1行下面插入新的一行,并输入“# Hello!”(按o进入编辑模式,同时光标向下另起一行,输入“# Hello!”)。

(25) 保存文档并退出(按Esc键,输入“:wq”)。


vim扩展

2.删除从光标所在处到行尾字符
在一般模式下输入大写“D”或者输入“d$”

3.删除从光标所在处到行首字符
在一般模式下输入大写“d^”

4.删除从光标所在行到文件末尾行
在一般模式下输入大写“dG”

5.删除指定范围内所有行
例:删除10到15行的所有内容
在一般模式下输入“:10,15d”回车

6.把正在编辑的文件另存为新文件
例:把正在编辑的文件另存为到“/root/”下面并保存为1.txt
在一般模式下输入“:w /root/1.txt”
例:把正在编辑的文件的第10行到第15行另存为1.txt并保存到root目录下在一般模式下输入“:10,15 w /root/1.txt”

7.把其它文件的内容导入到正在编辑的文件的光标所在处
例:把“/root/1.txt” 文件的内容,导入到下在编辑的文件的第10行下面
首先在一般模式下按“10G”把光标定位到第10行
然后按“o”小写,当前行的下面另起一行,并进入插入模式
最后按键盘上的返回到一般模式,再输入“:r /root/1.txt”回车

8.查找替换的功能使用
例:在10到15行的行首增加“#”
在一般模式下输入“:10,15s/^/#/”
例:在10到15行的行首去掉“#”
在一般模式下输入“:10,15s/^#//”
例:在10到15行的行首增加“//”
在一般模式下输入“:10,15s/^/\/\//”或者“:10,[email protected]^@//@”或者“:10,15s#^#//#”

注意:在上面所有命令的最后面都可以加g或者c一起配合使用,g的意思是行中出现的所有指定字符都替换,但是如果加了g那么前面就不能出现位置定义字符,反之前面出现的位置定义字符,那么后面就不可以出现g。在后面加c可以跟用户交互,在查找到符合命令的字符提示用户是否替换,需要用户确认,否则不需要确认

9.把输入的指定字符替换为指定的字符(替换的功能)
例:在编辑一个文档的时候,我要频繁的输入“abcdefghijklmnopqrstuvwxyz”这样的连续字符串,这时候我想只输入一个或者一串指定字符就可以替换为刚才的字符,比如我指定输入“aming”系统就会自动把“aming”替换成“abcdefghijklmnopqrstuvwxyz”
在一般模式下输入“:ab aming abcdefghijklmnopqrstuvwxyz”然后回车,再进入编辑模式,当你输入“aming”的时候就会发现自动替换成了“abcdefghijklmnopqrstuvwxyz”

10.同进编辑两个文件或者
例:我现正在编辑1.txt文件,然后我想再打开root目录下的2.txt同时编辑,并把窗口上下水平分隔,一起显示
在一般模式下输入“:new /root/2.txt”
例:我现正在编辑1.txt文件,然后我想再打开root目录下的2.txt同时编辑,并把窗口左右垂直分隔,一起显示
在一般模式下输入“:vsplit /root/2.txt”
注意:在一般模式下按“ctrl+w”组合键,再按左右,或者上下方向键,可以在不同窗口之间切换如果在一般模式下输入“:only”那么只保留当前正在编辑的窗口,其它全关闭

11.在vim查找关键字时不区分大小写
在一般模式下输入“:set ic”
如果想取消就输入“:set noic”

12.如何把文件设置成只读文件,只有强制保存时才能保存
在一般模式下输入“:set readonly”

13.把文件恢复到打开时的状态
在一般模式下输入“:e!”

14.配置文件的使用
以上那么多操作,像设置忽略大小写,设定快捷键,设定自动替换,等一些操作,当电脑重启后就没有了。这时候我们可以把这些命令写入配置文件,这样电脑重启后还是可以使用,我们有两种方法
第一种:所有用户都统一
修改“/etc/vimrc”文件,在末尾加入需要设置的命令,就是我红色标注的部分
第二种:只对当前用户
修改用户家目录下的“.vimrc”文件,注意有个点,这是隐藏文件,一般用户家下没有,需要自己手工创建。


vim文件加密

Linux用vim/vi给文件加密和解密
一、        利用 vim/vi 加密:
优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了;
缺点:很明显让别人知道加密了,容易让别人把加密的文件破坏掉,包括内容破坏和删除;

vi编辑器相信大家都很熟悉了吧,vi里有一个命令是给文件加密的,举个例子吧:
1)        首先在root主目录/root/下建立一个实验文件text.txt:
[[email protected] ~]#  vim/vi  text.txt
2)        进到编辑模式,输入完内容后按ESC,然后输入:X(注意是大写的X),回车;
3)        这时系统提示让你输入密码,2次,如下所示:
输入密码: *******
请再输入一次: *******
4)        保存后退出,现在这个文件已经加密了;
5)        用cat或more查看文件内容,显示为乱码;用 vim/vi 重新编辑这个文件,会提示输入密码,如果输入的密码不正确,同样会显示为乱码!
注意:文件加密后,千万别忘了密码!
二、        解密用vi加密的文件(前提是你知道加密的密码):
1)        用 vim/vi 打开文件如text.txt,要输入正确的密码,然后在编辑时,将密码设置为空,方法是输入下面的命令:
:set key=
然后直接回车,保存文件后,文件已经解密了。
2)        或者这样也行:
在正确打开文件后用 “:X” 指令,然后给一个空密码也可以。保存用“wq!”保存。
两种方法实际上效果是一样的。


vim快速删除指定的一段字符

因为不是一行,所以用dd不行,但用x去删除的话,又太慢。今天从网上发现一种特别快速删除的方法。
那就是使用da,如何使用,请看下面的例子。
比如,我的1.txt内容如下:

11111111111111111111111111
222222222222222222222222222222B3NzaC1yc2EAAAABIwAAAQEAv5oJvuIdaaVUsDOA2FbfnL0K2GbTc05Yg6TGM+8SNleI6bU5MhAy2uP5J4yCrMu43911hEJ2uh1UPycWX1O4xpEgUm8TGIs1HoQySnukv3g121uOLACRj37qqL9j4RRhrUxhunAW3alLSGIV0mxFD0ApyycFoLA/1I3hU7Yyx7tdripwz0FeHHhT3Qjfe9yC8Z6Ptq7cvBPXBBvc/G8pXVq3bnGMtj9Ifmbh7NnTvfHnEZGacf2MR4FSy0MMuNL0k3X5sBlsyP9/rXY9CPOh73eKUhZQoK3uWjwuDRp/dqrxgWDVeg0NZ+0t130pKu/LSREothWoVBu54rrtUUIdb3Sq0xsW4x9EhKGJJHPvBrbGbiDPTKBUaHdQEfmQQPAWeeX1hMC7lCunnfgTzf39Pv/2VpXz2l8NH2Jem0nrS48A6sf4eFz5VIakoRySMQu/6mY4s9aU3arbX+JvUE9s2/7D+JdqJlINtQqRU4V92LQq3BJaSMmKiwnPSytxDtARI3+8I2XXqFCJ5bBY7e3333333333333333333333
44444444444444444444444444444
我现在想删除22222222222和33333333333333333之间的字符只需要这样做:
1.  把1.txt的内容改成:
11111111111111111111111111
222222222222222222222222222222{B3NzaC1yc2EAAAABIwAAAQEAv5oJvuIdaaVUsDOA2FbfnL0K2GbTc05Yg6TGM+8SNleI6bU5MhAy2uP5J4yCrMu43911hEJ2uh1UPycWX1O4xpEgUm8TGIs1HoQySnukv3g121uOLACRj37qqL9j4RRhrUxhunAW3alLSGIV0mxFD0ApyycFoLA/1I3hU7Yyx7tdripwz0FeHHhT3Qjfe9yC8Z6Ptq7cvBPXBBvc/G8pXVq3bnGMtj9Ifmbh7NnTvfHnEZGacf2MR4FSy0MMuNL0k3X5sBlsyP9/rXY9CPOh73eKUhZQoK3uWjwuDRp/dqrxgWDVeg0NZ+0t130pKu/LSREothWoVBu54rrtUUIdb3Sq0xsW4x9EhKGJJHPvBrbGbiDPTKBUaHdQEfmQQPAWeeX1hMC7lCunnfgTzf39Pv/2VpXz2l8NH2Jem0nrS48A6sf4eFz5VIakoRySMQu/6mY4s9aU3arbX+JvUE9s2/7D+JdqJlINtQqRU4V92LQq3BJaSMmKiwnPSytxDtARI3+8I2XXqFCJ5bBY7e}3333333333333333333333
44444444444444444444444444444
注意,2222 和{ 之间没有换行。
2.  把光标移动到第一个{,也就是最后一个2后,然后输入da{ 即可把{}内的字符全部删除。
另外,除了可以使用{ 外,还可以使用 “, ‘, (  等成对的特殊符号。
其实vim还有一个比较常用的那就是v了,用v和d来删除也挺方便的:
打开一个文本后,直接按v,然后移动光标可以选中文本,当选中完你想要的文本后,直接按d,就删除了。


vim问题解析

  • vim黏贴的代码自动缩进导致全乱了

    • 用vim打开一个空白文档,然后把已经复制的代码给粘贴进来,发现它有自动缩进功能,最终导致粘贴的文本一行比一行靠右,看起来乱成一团。比较快的解决办法是,在粘贴文档前,在命令行模式下,输入     :set noai nosi

      然后按’i’ 进入编辑模式,再粘贴已经复制的代码内容,这样就不会自动缩进了。
      有时候,这样的方法不好用,可以尝试这种:
      :set paste

  • 客户端putty, xshell连接linux中vim的小键盘问题
    • 在putty上用vi的时候,开NumLock时按小键盘上的数字键并不能输入数字,而是出现一个字母然后换行(实际上是命令模式上对应上下左右的键)。解决方法如下:

      • PUTTY选项Terminal->Features里,找到Disable application keypad mode,选上就可以了
      • XSHELL也有小键盘问题 解决方法为

        修改session 属性 -> 终端->VT模式->初始数字键盘模式
        选择 设置为普通。

时间: 2024-08-28 17:59:01

超详细vim操作解析的相关文章

Linux/Centos7账号与权限管理(超详细实例操作)

Linux/Centos7账号与权限管理 管理用户账号.组账号 查询账号信息 设置文件和目录的权限 设置文件和目录的归属 一.前言概述 ? 作为多用户.多任务(Multi-Users,Multi-tasks)的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份.文件权限两个方面对资源进行限制.Linux基于用户身份对资源访问进行控制. 用户账号类别: 超级用户--root,权限最高 普通用户--自定义用户 匿名用户(nobody)类似于Windows中的Guest 程序用户--控

【公众号系列】超详细SAP HANA JOB全解析

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解析 写在前面 你一定知道SM36/SM37,ERP里的JOB我们都很熟悉,可以让一些功能性的程序定期地完成一些我们需要的指定性的操作.这样既可以节省时间,又可以避开服务器使用的高峰期,所以很多时候JOB是项目实施的必要手段. 那么,这些事情(定时执行定时任务的功能)是否可以在HANA里来完成呢,由于

C语言文件操作函数大全(超详细)

C语言文件操作函数大全(超详细) 作者: 字体:[增加 减小] 类型:转载 本篇文章是对C语言中的文件操作函数进行了详细的总结分析,需要的朋友参考下 fopen(打开文件)相关函数 open,fclose表头文件 #include<stdio.h>定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态.mode有下列几种形态字符串:r 打开只读文件,

JFinal 源码超详细解析之DB+ActiveRecord

我记得以前有人跟我说,"面试的时候要看spring的源码,要看ioc.aop的源码"那为什么要看这些开源框架的源码呢,其实很多人都是"应急式"的去读,就像读一篇文章一下,用最快的速度把文章从头到尾读一遍,那结果就是当你读完它,你也不清楚它讲了一个什么故事,想表达什么. 一个优秀的架构的源码我认为就好像一本名著一样,你的"文学"水平越高,你就越能读出作者设计的精妙之处.一篇源码在你不同水平的时候,能读出不同的东西,因此,我觉得优秀的框架的源码是经久

【智能算法】粒子群算法(Particle Swarm Optimization)超详细解析+入门代码实例讲解

喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 算法起源 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 .该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型.粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解.

mybatis源码-解析配置文件(三)之配置文件Configuration解析(超详细, 值得收藏)

1. 简介 1.1 系列内容 本系列文章讲解的是mybatis解析配置文件内部的逻辑, 即 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); 其背后的逻辑. 1.2 适合对象 了解如何使用 mybatis 来访问数据库.可参看<

算法核心——空间复杂度和时间复杂度超详细解析

算法核心——空间复杂度和时间复杂度超详细解析 一.什么是算法 算法: 一个有限指令集 接受一些输入(有些情况下不需要收入) 产生输出 一定在有限步骤之后终止 每一条指令必须: 有充分明确的目标,不可以有歧义 计算机能处理的范围之内 描述应不依赖于任何一种计算机语言以及具体的实现手段 其实说白了,算法就是一个计算过程解决问题的方法.我们现在已经知道数据结构表示数据是怎么存储的,而“程序=数据结构+算法”,数据结构是静态的,算法是动态的,它们加起来就是程序. 对算法来说有输入,有输出,相当于函数有参

超详细从零记录Hadoop2.7.3完全分布式集群部署过程

超详细从零记录Ubuntu16.04.1 3台服务器上Hadoop2.7.3完全分布式集群部署过程.包含,Ubuntu服务器创建.远程工具连接配置.Ubuntu服务器配置.Hadoop文件配置.Hadoop格式化.启动.(首更时间2016年10月27日) 主机名/hostname IP 角色 hadoop1 192.168.193.131 ResourceManager/NameNode/SecondaryNameNode hadoop2 192.168.193.132 NodeManager/

利用apache+svn+jenkins+maven 实现java环境的自动化构建和部署(一)(网内首发超详细版)

目录结构如下: 目录 1说明及环境介绍3 1.1说明3 1.2环境准备及格式约定4 2 Linux下apache搭建svn服务器4 2.1 apache安装部署4 2.2 svn安装部署5 2.3整合svn和apache6 2.4 ssl方式部署apache7 2.4.1安装apache7 2.4.2安装svn7 2.4.2 部署认证8 3 Linux下svn独立服务器方式部署9 3.1安装SVN9 3.2 配置环境10 3.3 权限配置样例11 3.4 启动SVN服务器12 3.5 访问方式1