1.  模式切换

vim的模式 $ vi filename 进入normal 模式,这是命令模式,用于执行大多数常用的编辑命令,不能输入

敲i 进入 insert 模式,这是正常的编辑模式,按Esc 可以回到 normal 模式

在normal 模式下输入 : (冒号) 进入底行模式,也是执行命令的模式,用的最多的是查找

不管在 insert 模式还是底行模式,按 Esc 就能回到 normal 模式 insert 模式和底行模式是不能直接相互切换的,只能通过 normal 模式切换

2. 保存退出

保存,退出,环境变量
:w :  将编辑的数据写入硬盘档案中(常用)
:w!:   若文件属性为『只读』时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!

:q:   离开 vi (常用)
:q! :  若曾修改过档案,又不想储存,使用 ! 为强制离开不储存档案。

:wq:   储存后离开

:x :  储存后离开

:wq! :  强制储存后离开

ZZ:   这是大写的 Z 喔!若档案没有更动,则不储存离开,若档案已经被更动过,则储存后离开!

:w [filename]:   另存为
:r [filename]:   在编辑的数据中,读入另一个档案的数据。亦即将 『filename』 这个档案内容加到光标所在行后面
:! :  command 暂时离开 vi 到指令列模式下执行 command 的显示结果!例如 『:! cat ./test』即可在 vi 当中察看当前文件夹中的test文件中的内容

3. 环境变量

:set nu :  设置行号(常用)

:set nonu :  取消行号(常用)

:set hlsearch :  设置高亮度查找

:set nohlsearch :  取消高亮度查找

:set backup :  自动备份文件

:set ruler :  开启右下角状态栏说明

:set showmode :  显示左下角的INSERT之类的状态栏

:set backspace={0,1,2} :  设置退格键功能。为2时可以删任意字符。为0或1时仅可以删除刚才输入的字符。

:set all :  显示目前所有的环境参数值

:set :  显示与系统默认值不同的参数值

:syntax on/off : 是否开启依据相关程序语法显示不同的颜色

:set bg=dark/light : 是否显示不同的颜色色调

4. 光标操作

h 或 向左箭头键(←):   光标向左移动一个字符

20h或者20(←):  光标向左移动20个字符,

j 或 向下箭头键(↓):  光标向下移动一行
20j或者20(↓):  光标向下移动20行,

k 或 向上箭头键(↑):  光标向上移动一行
20k或者20(↑):  光标向上移动20行

l 或 向右箭头键(→):   光标向右移动一个字符
20l或者20(→):  光标向右移动20字符,

^ : 移动这一行的开头,与$相对应

Ctrl + f :   屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
Ctrl + b:   屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
Ctrl + d :  屏幕『向下』移动半页
Ctrl + u:   屏幕『向上』移动半页
Ctrl + e:   屏幕『向下』移动一行
Ctrl + y :  屏幕『向上』移动一行
+ :  光标移动到非空格符的下一列
- :  光标移动到非空格符的上一列
n<space>:   那个 n 表示『数字』,按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20<space> 则光标会向后面移动 20 个字符距离。
n<Enter> :  n 为数字。光标向下移动 n 行(常用)
0:   或功能键[Home] 移动光标到下一行最前面,并进入到insert状态
$:   或功能键[End] 移动到这一行的最后面字符处(常用),这里的$在正则里面表示是结尾的意思,这样理解一下就能记住
H:   光标移动到这个屏幕的最上方那一行的第一个字符,H你就把它记成是header的缩写,这样就好记了
M:   光标移动到这个屏幕的中夬那一行的第一个字符,M你就把它记成middle的缩写
L:   光标移动到这个屏幕的最下方那一行的第一个字符,L你就把它记成last的缩写
G :  移动到这个档案的最后一行(常用)
nG n:   为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行
gg :  移动到这个档案的第一行,相当于 1G  (常用)

5. 删除,复制,粘贴,撤销

x, X:   在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键), X 为向前删除一个字符(相当于 [backspace] 亦即是退格键) (常用)
nx n:   为数字,连续向后删除 n 个字符。举例来说,我要连续删除光标后 10 个字符, 『10x』。
nX n:   为数字,连续删除光标前面的 n 个字符。举例来说,我要连续删除光标前的 10 个字符, 『10X』。

dd:  删除光标所在的那一整行(常用)
yy:  复制光标所在的那一行(常用)

ndd:  n 为数字。删除光标所在行向下 n 行,例如 20dd 则是删除 20 行(常用)
nyy:  n 为数字。复制光标所在行向下 n 行,例如 20yy 则是复制 20 行(常用)

d1G:  删除光标所在行到第一行的所有数据

y1G:  复制光标所在行到第一行的所有数据

dG:  删除光标所在行到最后一行的所有数据
yG:  复制光标所在行到最后一行的所有数据

d$:  删除光标所在处,到该行的最后一个字符
y$:  复制光标所在的那个字符到该行行尾的所有数据

d0:  那个是数字的 0 ,删除光标所在处,到该行的最前面一个字符
y0:  复制光标所在的那个字符到该行行首的所有数据

p, P :  p将复制的数据,粘贴在光标的下一行,P将复制的数据,粘贴到光标的上一行
J:   将光标所在行不下一行的数据结合成同一行
c :  重复删除多个数据,可以通过上下键来决定删除光标上面的,还是下面的
u :  撤销。(常用)
Ctrl + r:   撤销的撤销。(常用)

6  选择,查找 ,替换

v :   字符选择,会将光标经过的地方反白选择!
V :   行选择,会将光标经过的行反白选择!
Ctrl + v “:  区块选择,可以用长方形的方式选择资料
y :  将反白的地方复制起来
d :  将反白的地方删除掉

/string:   向光标之下寻找一个名称为string字符串
?string:   向光标之上寻找一个名称为string字符串

n:  正向查找,搜索出的string,可以理解成next

N:  反向查找,搜索出的string,可以理解成Not next

:n1,n2s/string1/string2/g :   这里的n1是查找的开始行数,n2是查找结束的行数。【:2,7s/ddd/fff/g】在第2行,第7行之间,将ddd替换成fff
:1,$s/string1/string2/g :  从第一行到最后一行寻找 string1 字符串,并将该字符串替换为 string2 !(常用)
:1,$s/string1/string2/gc :  从第一行到最后一行寻找 string1 字符串,并将该字符串替换为 string2 !且在替换前显示提示字符给用户确认 (confirm) 是否需要替换!(常用)

7. 文件恢复

目前主要的编辑器都有恢复功能,vim也不例外。vim是通过“保存”文件来挽回数据的。
每当我们在用vim编辑时,vim都会自动在被编辑的文件的目录下面再新建一个名为filename.swap的文件。这就是一个暂存文件,我们对文件filename所做的操作都会被记录到这个文件当中。如果系统意外崩溃,导致文件没有正常保存,那么这个暂存文件就会发挥作用。下面用一个例子来说明(Note:我用的是Ubuntu)。
打开终端,输入命令,将etc目录下面的manpath.config复制到tmp目录下面,并且更改当前工作目录为tmp:
cp /etc/manpath.config /tmp
cd /tmp
用vim编辑manpath.config文件:vim manpath.config。

我们在vim的一般模式下按下Ctrl+z组合键,vim就会被丢到后台执行。回到命令提示符环境后,我们模拟将vim的工作不正常中断。

kill -9 %1;强制杀死制定的进程。

这样导致暂存盘无法通过正常的流程结束,所以暂存文件不会消失,而是继续保留下来。当再次编辑那个文件时(输入命令vim manpath.config),出现(ubuntu 11.10):

这时,有六个按钮可以使用:

O(pen for Read-Only):打开成只读文件。

E(dit):用正常方式打开要编辑的文件,并不会载入暂存文件的内容。这很容易出现两个用户相互改变对方的文件的问题。

R(ecover):加载暂存文件的内容。

D(elete):如果你确定这个暂存文件是没有用的,则可以删除。

Q(uit):不进行任何操作,回到命令行。

A(bort):忽略这个编辑行为,和Q类似。

需要注意的是:这个暂存文件不会应为你结束vim后自动删除,必须要手动删除。否则每次打开对应的文件时都会出现这样的提示。

 8.  宏

这是一个ini类型的配置文件,可以看到每一行的最前面有一个逗号,现在如果需要将每行前面的逗号去掉,怎么办?在第一行行首按x,然后按j,然后按x...这样重复下去?确实,我最开始也是这样的,但如果这个文件有100行要这样修改呢?或者1000行?

;=====================================================================================
;This is a sample configuration file when upgrading XXX using InstallShield.
;Author: ini_always
;Date: 8/24/2011
;Last modified: 9/20/2011
;Note: Install script does NOT verify whether the configuration file is in a "WELL"
;format, a WRONG format may lead to installation failure.
;If more information is needed, please check the document for details.
;=====================================================================================

  

好吧,少废话,进入正题。所谓宏,在vim里面是指某种特定顺序的一系列操作,我们可以录制自己的操作序列,然后重复这个序列多次,以简化某种重复的操作。vim宏有录制和播放的过程,录制就是你教给vim该怎么操作,播放就是vim照着你教的进行自动操作。因此,对于上面的文件处理,首先要进行宏录制:

1.把光标定位在第一行;

2.在normal模式下输入qa(当然也可以输入qb, qc, etc,这里的a, b, c是指寄存器名称,vim会把录制好的宏放在这个寄存器中)(PS:如果不知道什么是vim的寄存器,请自行放狗搜之);

3.正常情况下,vim的命令行会显示“开始录制”的字样,这时候,把光标定位到第一个字符(按0或者|),再按x删除,按j跳到下一行;

4.normal模式下输入q,结束宏录制。

好了,经过以上步骤,我们定义了一个存储在寄存器a中的宏,它的操作序列是:0->x->j,也就是跳到行首,删除,跳到下一行。

现在,第一行已经删除了行首的逗号,而且光标也已经在第二行,现在,在normal模式下输入@a,以播放我们刚录制好的存在寄存器a中的宏。于是,第二行行首的逗号也被删除,光标停在了第三行。

这也不简单啊?你肯定会这样想,要删除100行,我还得输入100个@a,我还不如手动删除呢。呵呵,vim早就想到了,输入7@a,好了,剩下的7行全部搞定了。(PS:在命令前面加数字,就是代表要执行这个命令多少次)

当然,这个例子很简单,但也很典型。利用好vim的宏,可以使一些原本很无聊的工作要简单很多。

9    ( . ) 命令

重复上次操作

0050 Linux VIM 命令的更多相关文章

  1. Linux vim命令

    介绍 vim命令和vi的操作基本一致,vim命令的参数很多,我在这里列出了一些平时需要用的一些参数,vim主要有两个界面一个是esc的操作界面还有一个是输入i的编辑界面. 移动光标 0 (零):将光标 ...

  2. linux vim 命令使用

    基本上vim可以分为三种状态,分别是命令模式(command mode).插入模式(Insert mode)和底行模式(last line mode) 模式切换方法 在命令模式输入“i”,进入插入模式 ...

  3. Linux vim命令记录

    Ndd  :删除N行 多行删除 :1,10d ctrl+v ,移动光标,ctrl+i,输入#,esc :移动处均会输入# gg:文档头 G:文档尾 o:下一行,并进入insert模式 O:上一行并输入 ...

  4. 从零开始学安全(十六)● Linux vim命令

    游标控制 h 游标向左移 j 游标向下移 k 游标向上移 l (or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...

  5. Linux vim命令详解

    vi: o  处于下一行编辑模式 A  处于编辑的后面  ==>END gg 文件的开头 98gg 跳转到第98行 Shift + G 文件结尾 $ 文件行结尾 ^ 文件行开头   ==> ...

  6. linux VIM基本命令

    linux VIM命令: vim 在命令行中输入vim,进入vim编辑器 Esc 退出i(插入)命令进行其他命令使用 :sh 进入shell命令行,运行完命令后ctrl+d退出又一次进入vim编辑继续 ...

  7. 今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在Win中见过的/r回车符号。由于编辑软件的编码问题,某些IDE的编辑器在编辑完文件之后会自动加上这个^M符号。看起来对我们的源代码没有任何影响,其实并不然,当我们把源代码文件Check In到svn之类

    今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在W ...

  8. [工作需求]linux常用命令以及vim常用命令

    一.             Linux 常用命令 mkdir dirname新建文件夹 cd ~ 进入自己的家目录 cd dirname 进入名字为dirname的目录: l 显示当前文件夹下的文件 ...

  9. Linux常用命令——文本编辑器Vim

    Linux常用命令--文本编辑器Vim Linux  Vim常用操作 插入命令 a 在光标所在字符后插入 A 在光标所在行尾插入 i 在光标所在字符前插入 I 在光标所在行首插入 o 在光标下插入新行 ...

随机推荐

  1. Maven-001-初识及本地环境配置

    前段时间想对自己之前写的一些代码或者小工具,因为写的比较乱,因而想系统的管理一下自己学习 Java 时写的源码,经过多方请教.网上查询,最终决定使用 Maven 来管理自己写的代码. Maven 是一 ...

  2. inittab 分析

    内核初始化后,启动init进程/sbin/init,读取/etc/inittab文件进行初始化. 参考链接 http://wenku.baidu.com/view/5a82b5f67c1cfad619 ...

  3. php连接和操作mysql数据库

    <?php //数据库连接文件:link.php $link = mysql_connect("localhost", "root", "&qu ...

  4. echo 输入指定空白字符

    ansible-direc:~ # echo -n "starting service....";echo -ne "\033[50G";echo " ...

  5. js作用域学习

    代码解析至少分两步 1):查找var,function参数例如下面这个例子 a= 未定义 fn1={alert(2)}函数的话,是整个整体 2):逐行读代码:类似=+-%*等都是表达式,表达式可以改变 ...

  6. [转]JAVA程序执行顺序,你了解了吗:JAVA中执行顺序,JAVA中赋值顺序

    本文主要介绍以下两块内容的执行顺序,熟悉的大虾可以直接飘过. 一.JAVA中执行顺序 静态块 块 构造器 父类构造器 二.JAVA中赋值顺序 静态块直接赋值 块直接赋值 父类继承的属性已赋值 静态变量 ...

  7. linux命令-sftp(模拟ftp服务)和scp(文件异地直接复制)

    1)sftp sftp是模拟ftp的服务,使用22端口 针对远方服务器主机 (Server) 之行为 变换目录到 /etc/test 或其他目录 cd /etc/testcd PATH 列出目前所在目 ...

  8. 安装第三方库出现 Python version 2.7 required, which was not found in the registry

    安装第三方库出现 Python version 2.7 required, which was not found in the registry 建立一个文件 register.py 内容如下. 然 ...

  9. 处理mysql上百万条数据的优化

    php 处理上百万条的数据库如何提高处理查询速度 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字 ...

  10. asp.net单例模式

    目的:保证一个类只有一个单一的实例 好处:1.在资源共享的情况下,避免由多个操作而导致的资源消耗:2.提供可变数目的实例. 标准的单例代码如下: using System; using System. ...