linux之vim编辑器

Posted 大江东流水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux之vim编辑器相关的知识,希望对你有一定的参考价值。

 

1 KDE与GNOME中的文本编辑器


gEdit是一个简单的文本编辑器,用户可以用它完成大多数的文本编辑任务,如修改配置文件等。

在Linux中,除了上面介绍的KDE与GNOME中各种编辑器以外,还有一个功能强大的字处理软件,即OpenOffice.org Writer,它提供了许多十分强大的工具来帮助用户方便的建立各种文档。LibreOffice是OpenOffice.org办公套件衍生版,同样免费开源,但相比OpenOffice增加了很多特色功能。另外,推荐一款字处理软件:永中Office。

2  Vi、Vim与Emacs文本编辑器


1.Vi、Vim
Vi是Visual interface的简称。
Vim是Vi的增强版,即Vi Improved。在后面的实例中将介绍Vim的使用。
2.Emacs
Emacs其实是一个带有编辑器、邮件发送、新闻阅读和Lisp解释等功能的工作环境。


为什么学vi?
1)所有的Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在;
2)很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
3)vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法癿正确性,方便程序设计;
4)因为程序简单,编辑速度相当快速。

系统自带教程:vimtutor
vim [options] [filelist]
常用选项:
+[num]
+/{pat}


1、工作模式、命令模式、输入模式和末行模式

Vim拥有5种编辑模式:命令模式、输入模式、末行模式、可视化模式、查询模式。
1).命令模式(其它模式→ESC)
2).输入模式(命令模式→a、i、o、A、I、O)
3).末行模式(命令模式→:)
4).可视化模式(命令模式→v)
5).查询模式(命令模式→?、/)



2、模式之间切换

命令模式:


输入模式:
新增 (append)

a :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。
A: 从光标所在列最後面的地方开始新增资料。

插入 (insert)

i: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。
I :从光标所在列的第一个非空白字元前面开始插入资料。

开始 (open)

o :在光标所在列下新增一列并进入输入模式。
O: 在光标所在列上方新增一列并进入输入模式

末行模式:

3、打开文件
# vim /path/to/somefile
vim +# :打开文件,并定位于第#行
vim +:打开文件,定位至最后一行
vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首

默认处于编辑模式
4、关闭文件
1、末行模式关闭文件
:q 退出
:wq 保存并退出
:q! 不保存并退出
:w 保存
:w! 强行保存
:wq --> :x
2、编辑模式下退出
ZZ: 保存并退出

4、移动光标(编辑模式)
1、逐字符移动:
h: 左
l: 右
j: 下
k: 上
#h: 移动#个字符;

2、以单词为单位移动
w: 移至下一个单词的词首
e: 跳至当前或下一个单词的词尾
b: 跳至当前或前一个单词的词首

#w:

3、行内跳转:
0: 绝对行首
^: 行首的第一个非空白字符
$: 绝对行尾
home
end

4、行间跳转
#G:跳转至第#行;
G:最后一行
1G:跳转到第1行首===gg

末行模式下,直接给出行号即可
:5 直接定位到第5行首

5、翻屏
Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏

Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏

6、删除单个字符
x: 删除光标所在处的单个字符
#x: 删除光标所在处及向后的共#个字符

7、删除命令: d
d命令跟跳转命令组合使用;
#dw, #de, #db

dd: 删除当前光标所在行
#dd: 删除包括当前光标所在行在内的#行;

末行模式下:
StartADD,EndADDd
.: 表示当前行
$: 最后一行
+#: 向下的#行
8、粘贴命令 p
p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
P: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;

9、复制命令 y
用法同d命令
yy 复制1行
5yy 复制5行

10、修改:先删除内容,再转换为输入模式
c: 用法同d命令

11、替换:r
R: 替换模式

12、撤消编辑操作 u
u:撤消前一次的编辑操作
连续u命令可撤消此前的n次编辑操作
#u: 直接撤消最近#次编辑操作

撤消最近一次撤消操作:Ctrl+r

13、可视化模式
v: 按字符选取
该模式下通过光标移动选择文本,选取后按 y 可以把文本提取到缓冲区(即复制),c 可以剪切。之后可以使用p在光标后粘贴,P粘贴在光标前
V:按矩形选取
V是行选取模式,以行为单位进行选取。Ctrl+v是块选取模式,可以选取一块矩形区域中的文本。

14、查找
/PATTERN
?PATTERN
n
N

15、查找并替换
在末行模式下使用s命令
ADDR1,[email protected]@[email protected]
1,$
%:表示全文
:s/root/admin/ 替换光标所在行第一个root为admin
:s/root/admin/g 替换光标所在行所有root为admin
:1,5 s/root/admin/g 替换第1-5行所有root为admin
:1,$ s/admin/root/g 替换所有行的admin为root ==== 1,$ 等价于%



16、使用vim编辑多个文件
vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件

退出
:qa 全部退出

17、分屏显示一个文件
Ctrl+w, s: 水平拆分窗口
Ctrl+w, v: 垂直拆分窗口

在窗口间切换光标:
Ctrl+w, ARROW(表示上下左右箭头)

:qa 关闭所有窗口

18、分窗口编辑多个文件
vim -o : 水平分割显示
vim -O : 垂直分割显示

19、将当前文件中部分内容另存为另外一个文件
末行模式下使用w命令
:w
:ADDR1,ADDR2w /path/to/somewhere

20、将另外一个文件的内容填充在当前文件中
:r /path/to/somefile

21、跟shell交互
:! COMMAND

22、高级话题
1、显示或取消显示行号
:set number
:set nu

:set nonu

2、显示忽略或区分字符大小写
:set ignorecase
:set ic

:set noic

3、设定自动缩进
:set autoindent
:set ai
:set noai

4、查找到的文本高亮显示或取消
:set hlsearch
:set nohlsearch

5、语法高亮
:syntax on
:syntax off

23、配置文件
/etc/vimrc
~/.vimrc
set hlsearch "高亮度反白
set backspace=2 "可随时用退格键删除
set autoindent "自动缩排
set tabstop=4 "缩进
set softtabstop=4 softtabstop是“逢4空格进1制表符”,前提是你tabstop=4
set shiftwidth=4 自动缩进空格长度
set mouse=a "使用鼠标
set selection=exclusive
set selectmode=mouse,key
set ruler "可显示最后一行的状态
set showmode "左下角那一行的状态
set nu "可以在每一行的最前面显示行号啦!
set bg=dark "显示不同的底色色调
syntax on "进行语法检验,颜色显示

:1,10 co 5 复制1-10行到第5行后面

本节作业:

 

1.

练习vi的各种工作模式及切换方法:
 
操作步骤: 
(1)vi的工作模式有哪几种?操作完成各种工作模式之间的切换。 
(2)指出vi的几种工作模式之间的切换方法。 
(3)有哪些方法可以退出vi,并练习保存退出及不保存退出,查看结果。

2.

写出下列要求要执行的命令,如果是在末行模式下执行,需写出“:”号,注意大小写。
1)、向后搜索字符串stream  
  2)、向前搜索字符串uplook
3)、复制10行然后粘贴
  4)、将光标移到第55行
5)、将光标移到最末行
6)、删除共20行
7)、恢复前一步的操作
8)、将光标移到行首
  9)、将光标移到行尾
10)、将从第10行到第50行的内容写入/back/file1 
11)、将从当前行开始,总共20行的内容存入/back/file2 
  12)、读取/etc/conf/hello.txt文件的内容插入当前行后面
  13)、替换第20行到第80行中的所有httpd为bind  
14)、替换文中全部的root为admin
15)、在每一行的行首插入字符串new 
16)、在第10行到第50行的行尾插入字符串new 
17)、让vi显示每一行的行号

 

初识shell:


GNU bash
========================================================
通常计算机硬件是由运算器、控制器、存储器、输入/输出设备等等这些物理设备共同组成的,而能够让机箱内各种硬件设备各司其职的东西就叫做系统内核。Linux系统的内核负责驱动硬件、管理活动和分配/管理硬件资源等等任务,如此说来系统内核对计算机正常稳定的运行来讲可真的是太重要了,因此一般不建议直接去编辑内核中的参数,而是让用户通过基于“系统调用接口”开发出的程序/服务来管理计算机,这样一层层环环相扣来满足咱们的日常工作需要,如图所示。

技术图片
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。

我们可以使用SHELL实现对Linux系统的大部分管理例如:
1. 文件管理
2. 用户管理
3. 权限管理
4. 磁盘管理
5. 软件管理
6. 网络管理
......

内容提要:
Linux控制台使用
系统与硬件
bash shell提示符
shell 语法
bash 特性
Linux获得帮助


1 Linux控制台使用


虚拟终端和控制台
虚拟终端
屏幕和键盘只是一个终端,可能不够用,又不想增加设备投入,就产生了虚拟终端。像gnome-terminal,urxvt,mlterm,xterm等等:
是一个程序,职责是模拟终端设备,和虚拟终端的区别表面上在于它以 GUI 形式的窗口出现,内部则是程序结构和系统控制结构有所不同,但本质上差不多。

控制台tty
显示系统消息的终端就叫控制台,Linux 默认所有虚拟终端都是控制台,都能显示系统消息。
但有时专指CLI下的模拟终端设备的一个程序,和gnome-terminal,urxvt,mlterm,xterm等相同,只是CLI和GUI界面的区别。一般console有6个,tty1-6,CTRL+ALT+fn切换。

控制台切换
Linux 预设的情况下会提供六个Terminal 来让使用者登入, 切换的方式为使用:[Ctrl] + [Alt] + [F1]~[F6]的组合按钮。
图形界面切换到字符界面终端: Ctrl+Alt+F2-6
切换到图像界面 Alt+F1或按ctrl+alt+F1
字符界面之间切换: [Alt] + [Fn]

虚拟终端(pty、pts)
如果我们远程telnet到主机时,需要一个终端交互。这就是虚拟终端pty(pseudo-tty)。而 pts/ptmx(pts/ptmx结合使用,进而实现pty)

伪终端(/dev/pty/)这个是终端的发展,为满足现在需求(比如网络登陆、xwindow窗口的管理)。
伪终端(Pseudo Terminal)是成对的逻辑终端设备,例如/dev/ptyp3和/dev/ttyp3(或着在设备文件系统中分别是/dev/pty/m3和/dev/pty/s3)。


已经打开的终端上开启新窗口、并列、切换、缩小、放大
放大:ctrl+shift+"+"
缩小 ctrl -
新建一个独立窗口 ctrl+shift+n
新建一个并列窗口 ctrl+shift+t

2 系统与硬件

 

 

2.1 Linux硬件资源管理


1. 查看系统pci设备
lspci 列出所有的pci设备,比如主板、声卡、显卡、网卡等。
通过lspci -v 可以查看更详细信息。

2. 查看cpu信息
more /proc/cpuinfo

3. 查看内存信息
more /proc/meminfo
free -m
free -h

4. 查看磁盘分区信息
fdisk -l

 

2.2 常见文件系统类型

 

点击这里点击这里
文件系统格式 备注
msdos dos文件系统类型
vfat 支持长文件名的DOS分区文件系统类型
iso9660 光盘格式文件系统类型
ext2/ext3/ext4 Linux文件系统类型
xfs Linux下高性能的日志文件系统,RHEL7 默认文件系统类型



3 bash shell提示符


===================
[[email protected] ~]# echo $PS1
[[email protected]h W]$
[[email protected] ~]# -->root用户提示符
[[email protected] ~]$ -->普通用户提示符

PS1常用的参数含义如下:
d :#代表日期,格式为weekday month date,例如:"Mon Aug 1"
H :#完整的主机名称
h :#仅取主机的第一个名字
:#显示时间为24小时格式,如:HH:MM:SS
T :#显示时间为12小时格式
A :#显示时间为24小时格式:HH:MM
u :#当前用户的账号名称
v :#BASH的版本信息
w :#完整的工作目录名称
W :#利用basename取得工作目录名称,所以只会列出最后一个目录
# :#下达的第几个命令
$ :#提示字符,如果是root时,提示符为:# ,普通用户则为:$

[[email protected] ~]# date
2012年 10月 24日 星期三 09:38:54 CST

[[email protected] ~]# whoami
root

[[email protected] ~]# useradd jack
[[email protected] ~]# passwd jack
Changing password for user jack.
New UNIX password:
BAD PASSWORD: it is WAY too short
Retype new UNIX password:
passwd: all authentication tokens updated successfully.


4 shell 语法


=====================
命令 选项 参数
[[email protected] ~]# ls
[[email protected] ~]# ls -a
[[email protected] ~]# ls -a /home

命令:整条shell命令的主体
选项:会影响会微调命令的行为 //通常以 -, --
- 短格式,比如-a -l 和 -al等价
--长格式
参数:命令作用的对象,一般情况下参数是文件或目录。

5 bash基本特性


系统的shell:cat /etc/shells
当前系统默认的shell:echo $SHELL


1. 自动补全<tab> //Tab只能补全命令和文件 RHEL6
# ls /etc/sysconfig/network-scripts/
# ls /etc/sysconfig/network-scripts/ifcfg-eth0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
# service network restart
# service sshd restart
# date -s 12:30

2. 快捷键
^C 终止前台运行的程序 //ping 172.16.8.100
^D 退出 等价exit
^L 清屏
^A 光标移到命令行的最前端 //编辑命令
^E 光标移到命令行的后端 //编辑命令
^U 删除光标前所有字符 //编辑命令
^K 删除光标后所有字符 //编辑命令
^R 搜索历史命令,利用关键词
Alt+. 引用上一个命令的最后一个参数,等价于!$,服务器端使用
ESC, .引用上一个命令的最后一个参数,等价于!$
# ls /etc/sysconfig/network-scripts/ifcfg-eth0
# cat ESC .

3. 历史命令
# history
a. 光标上下键
b. ^R //搜索历史命令(输入一段某条命令的关键字:必须是连续的)
c. !220 //执行历史命令中第220条命令
!字符串 //搜索历史命令中最近一个以xxxx字符开头的命令,例如!ser
!$ //引用上一个命令的最后一个参数
示例1:
[[email protected] ~]# ls /root /home
[[email protected] ~]# cd !$
cd /home

示例2:
[[email protected] ~]# ls /root /home
[[email protected] ~]# touch !$/file1
touch /home/file1

示例3:
[[email protected] ~]# service nfs restart
[[email protected] ~]# ls
[[email protected] ~]# date
[[email protected] ~]# !se

4. 命令别名
# alias //查看系统当前的别名
ll=‘ls -l --color=tty‘
# alias localhost=‘cat /etc/sysconfig/network-scripts/ifcfg-eth0‘ //建立别名(临时的,仅在当前Shell生效)
# unalias localhost //取消localhost这个别名

[[email protected] ~]# type -a ls
ls is aliased to `ls --color=auto‘
ls is /bin/ls

[[email protected] ~]# /bin/ls
[[email protected] ~]# ls //别名优先
[[email protected] ~]# ls //跳过别名

[[email protected] ~]# cp -rf /etc /tmp
[[email protected] ~]# cp -rf /etc /tmp
[[email protected] ~]# cp -rf /etc /tmp

永久别名:
[[email protected] ~]# gedit /etc/bashrc //添加如下行
alias localhost=‘cat /etc/sysconfig/network-scripts/ifcfg-eth0‘


6 Linux获得帮助


如何判断一个命令是内部命令还是外部命令呢?
type

#help可以列出系统所有内部命令
内部命令一般可以使用 help 命令,查看帮助
1. 命令 --help
# ls --help
用法:ls [选项]... [文件]...

ls 常见选项
-a all,查看目录下的所有文件,包括隐藏文件
-l 长列表显示
-h human 以人性化方式显示出来
-d 只列出目录名,不列出其他内容
-t 按修改时间排序
-S 按文件的Size排序
-r 逆序排列reverse
-i 显示文件的inode号(索引号)

# date --help
Usage: date [OPTION]... [+FORMAT]
or: date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]

# date
# date +%H
# date +%F
# date 0214080014
# date 0214080014.00

2. man 手册名针对命令帮助,针对配置文件帮助,针对函数帮助)
技术图片

[[email protected] ~]# man man
MANUAL SECTIONS
The standard sections of the manual include:

1 User Commands

2 System Calls

3 C Library Functions

4 Devices and Special Files

5 File Formats and Conventions

6 Games et. Al.

7 Miscellanea

8 System Administration tools and Deamons


命令帮助: 章节1,章节8
函数帮助: 章节2,章节3
文件格式: 章节5

一般情况是不需要使用章节号,例如:
# man ls
# man useradd
# man setfacl (/EXAMPLES)

技巧1:按章节查询
/usr/bin/passwd 修改用户口令命令
/etc/passwd 包含用户信息的配置文件

# man -f passwd 列出所有章节中的passwd手册
# man 1 passwd passwd命令的帮助
# man 5 passwd 用户配置文件的帮助

技巧2:在所有章节中查询
# man -a passwd

3. 官方手册
http://docs.redhat.com Enterprise Linux (5/6/7)
http://www.mysql.com docs

4. baidu, google


man搜索:
/ -a,从上往下,n向下继续搜索,N向上继续搜索
?-a,从下往上

[]可选项
<>必选
...可以出现多次
|多选一
{}分组,无特殊意义
MAN:
NAME:命令名称及功能简要说明
SYNOPSIS:用法说明,包括可用的选项
DESCRIPTION:命令功能的详尽说明,可能包括每一个选项的意义
OPTIONS:说明每一个选项意义
FILES:此命令相关的配置文件
BUGS:
EXAMPLES:使用示例
SEE ALSO:另外参照
==========================================================

本节作业:

 

1. 完成课堂中学习的所有内容

 

2. 学习bash shell 命令的搜索顺序 hash aliase builtin $PATH keyword function

 

3. mysql openstack docker zabbix





以上是关于linux之vim编辑器的主要内容,如果未能解决你的问题,请参考以下文章

Linux之编辑器Vim

散打Linux基础教程之二:Vim编辑器的使用

散打Linux基础教程之二:Vim编辑器的使用

Linux之Vim编辑器

Linux之Vim编辑器

Linux之vim编辑器(超详细)