linux vim操作详解

news/2024/7/21 12:44:35 标签: vim, linux

首先,我们需要了解vim的三种模式

  • 命令模式
  • 插入模式
  • 底行(末行)模式

三种模式的切换如下:
进入vim后,处于命令模式,通过i/a/o可以进入插入模式,通过冒号(:)可以进入底行模式。在底行模式和插入模式下,通过Esc返回命令模式。

这里写图片描述

一.命令模式下的操作

1.移动光标组合键

(1)上下左右
k、j、h、l 分别表示上、下、左、右

(2)文档开头、结尾
gg:文档开头
G:文档结尾

(3)上下翻页
ctrl+b(或者pageUp):上翻页
ctrl+f(或者pageDown):下翻页

(4)行首行尾
数字0(或者home):行首
^:本行的第一个非空字符
$(或者end):行尾

2.替换和删除

(1)删除一行
dd
(2)替换首次出现的old
?/old/new
(3)替换行中所有的old
:/old/new/g
(4)替换文件中所有的old
:% s/old/new/g

3.复制粘贴

(1)复制一行
yy
(2)粘贴到光标后
p
(3)粘贴到光标前
P
(4)选中文本(使用较多)
v:字符选中命令
V:行选中命令

按v或者V,通过上下左右选中文本,选中后,可以执行下面的操作

  • d ------ 剪切操作
  • y -------复制操作
  • p -------粘贴操作
  • ^ --------选中当前行,光标位置到行首(或者使用键盘的HOME键)
  • $ --------选中当前行,光标位置到行尾(或者使用键盘的END键)

4.撤销

(1)撤销前一条命令
u
操作:在输人错误时,从“插入模式”退回命令模式,然后使用u命令就可以撤销了
(2)恢复撤销
Ctrl + r
操作:在命令模式下,如果不小心输入u,可以使用ctrl+r命令恢复

5.搜索

(1)正向搜索
操作:输入/,后面跟要搜索的字符串,然后按回车。如果查找下一个,按“n”即可。

(2)反向搜索
操作:输入?,后面跟要搜索的字符串,然后按回车

(3)继续搜索
n
(4)定位行(使用较多)
:行数
例如: ":35"表示定位到35行

6.显示行数

显示行数::set nu 或者 :set number
取消行数显示::set nonu 或者 :set nonumber

7.将多行代码前后移动一个tab的

  • 连续的十几行到50行内的左右移动
    a.第m行到第n行右移一个tab   :m,n>
    b.第m行到第n行左移一个tab   :m,n<

  • 连续的i行的左右移动(i > 100)
    a.向左:移动到要处理的首行,输入ma;移动到要处理的尾行,输入<'a
    b.向右,即将第二个命令中的 ‘<’ 改为 '>'即可

二、插入模式下的操作

进入插入模式
i:在光标左侧输入文本(使用最多)
a:在光标右侧输入文本
o:在光标的下一行添加新行

I:在光标的开头输入文本
A:在光标的末尾输入文本
O:在光标的上一行添加新行

注:只有在插入模式下才可以输入文字

三、底行模式下的操作

(1):q
在未做修改的情况下退出
(2):q!(使用较多)
放弃所有修改,退出
(3):wq(使用较多)
将编辑的内容写入原始文件,并退出
(4):wq!
当:wq退出不小的时候,强行退出
(5):w file
强编辑的内容写入file文件。相当于另存为


http://www.niftyadmin.cn/n/1530591.html

相关文章

写代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出

栈溢出(StackOverflowError)堆溢出(OutOfMemoryError:Java heap space)永久代溢出(OutOfMemoryError: PermGen space)直接内存溢出 一、堆溢出 创建对象时如果没有可以分配的堆内存&#xff0c;JVM就会抛出OutOfMemoryError:java heap space异常。 堆溢出实例&#xff1a; …

Exception in thread main java.lang.OutOfMemoryError: GC overhead limit exceeded

OutOfMemoryError&#xff0c;大家都知道是内存溢出了&#xff0c;那么GC overhead limit exceeded又是什么意思呢&#xff1f; GC overhead limit exceeded 这是JDK6新增的错误类型&#xff0c;当GC占用大量时间释放很小空间时就会抛出这个异常&#xff0c;是JDK自身的一种保…

数据库常用查询

1、查询表结构 SQLServer sp_help [table_name]; sp_columns [table_name];MySQL desc [table_name]&#xff1b; SHOW COLUMNS FROM [table_name]; SHOW FIELDS FROM [table_name]; 2、查看数据库版本号 SQLServer SELECT version;MySQL SELECT version; SELECT VE…

ConcurrentHashMap线程安全问题

在使用原子操作进行计数时&#xff0c;我们经常会用到ConcurrentHashMap&#xff0c;虽然ConcurrentHashMap是线程安全的&#xff0c;但是如果你操作的是其本身&#xff0c;并如果使用不当&#xff0c;也会造成很多线程安全问题。 看下面的例子&#xff0c;你觉得会输出多少呢…

new BigDecimal时,请使用字符串

一、构造BigDecimal BigDecimal提供了丰富的构造函数&#xff0c;可以通过int、long、double、String等来构造一个BigDecimal对象。 但是&#xff0c;使用double作为参数的构造函数&#xff0c;无法精确构造一个BigDecimal对象&#xff0c;需要自己指定一个上下文的环境&…

MySQL使用索引与不使用索引比较

首先&#xff0c;我们通过下面的方式生成1百万条数据。 http://blog.csdn.net/u011983531/article/details/67639678 一、普通索引 在不建立索引情况下&#xff0c;通过下面的语句查询age20的人数 SELECT count(1) FROM t_user WHERE age20; 耗时&#xff1a;1.2s 通过下…

自己动手写对象池

一、设计对象池 对于一个对象池来说&#xff0c;通常具备下面几个常用功能&#xff1a; 获取对象归还对象销毁对象池大小最大空闲数 通常情况下&#xff0c;我们还会采用工厂方式来生成对象&#xff0c;所以&#xff0c;还需要一个设置工厂的方法设置生成对象的工厂

Java演示TCP 3次握手与 4次分手

啥都不说&#xff0c;先上代码。 服务端&#xff1a; package com.ghs.test;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;public class TCPServerSocket {private static ServerSocket serverSocket;private static Socket socket;pu…