一、vi、vim介绍
 
文本编辑器分为:
(1)基于图形界面,如gedit、geany等;
(2)基于命令行,如nano、vi、joe等;
每个命令行界面的文本编辑器都有各自不同的快捷键,比如nano的保存为CTRL+W,vim的保存为:w;
基于命令行的文本编辑器是必要的,因为Linux的tty1~tty6都是命令行界面,是打不开图形界面的文本编辑器的;
 
vi是每个Linux Distribution都默认安装的文本编辑器,并且很多软件的默认编辑器都是vi,因此学习vi是很必要的;
vim是vi的高级版本,vi是文本编辑器,而vim应该说是程序编辑器,因为能够像一般的IDE一样,根据文件名载入不同的语法高亮,即颜色区分,比如java文件会遵循java的语法高亮;
下面我们就编写一个"hello world"的java程序来看看vim的语法高亮;
 
 
可以看出vim有很好的语法检查功能,因为关键字都使用了不同的颜色标出;
 
 
vi有三种模式:
(1)一般模式:进入vi的默认模式,能够进行复制、黏贴、删除等操作;
(2)编辑模式:从一般模式按下‘i’即可进入;
(3)命令行模式:从一般模式按下“:”、'?'、'/'即可进入;
 
注意:如果安装了vim后,输入vi后也是使用vim编辑器,我们输入alias后看到“alias vi='vim'”;
 
 
二、vi/vim按键
 
 

“一般模式”的常用按键

h

向左

J

向下

K

向上

l

向右

20h

向左20个字符

20j

向下20行

20k

向上20行

20l

向右20个字符

Page Up

向上翻页

Page Down

向下翻页

Home

光标移到当前行的最左端

End

光标移到当前航的最右端

n [空格]

光标向右移动n个字符

N[Enter]

光标向下N行

G

光标移到最后一行

nG

光标移动到第n行

gg或1G

光标移动到第一行

/word

向下查找word

?word

向上查找word

n

如果是/word后使用,则表示向下继续查找;

如果是?word后使用,则表示向上继续查找;

N

如果是/word后使用,则表示向上继续查找;

如果是?word后使用,则表示向下继续查找;

:n,m/old/new/g

从第n行到第m行中,将old替换为new

:n,$s/old/new/g

从第n行到最后一行中,将old替换为new

u

类似windows中的CTRL+Z,前一步

x

向后删除一个字符

X

向前删除一个字符

3x

向后删除3个字符

3X

向前删除3个字符

dd

删除当前行

3dd

删除当前行开始的3行

yy

复制当前行

3yy

复制当前行开始的3行

p

黏贴到当前光标的下一行

P

黏贴到当前光标的上一行

CTRL+r

重做前一个操作

.

重复前一个操作

 

“命令行模式”的常用按键

:w

保存

:q

退出vim

:wq

保存并退出

:wq!

(在可以转换权限的情况下)强制保存并退出

:q!

直接退出不保存

:w filename

另存为filename

:n,m w filename

将第n行到第m行另存为filename

:set nu

显示行号

:set nonu

不显示行号

:! command

暂时离开vim,并执行command,执行完后再进入vim

:r filename

将filename文件的数据读入当前文件

:set all

显示当前vim的环境配置

 
三、vim的恢复机制
 
 
vim正在编辑某个文件时都会同时存在 .file.swp,此文件用来暂存,帮助恢复文件内容,当vim正常关闭此文件时,.filename.swp文件会消失;
 
 
 
我们看到图中说明了出现此界面的两个原因:
(1)多人同时编辑此文件:因为Linux是多用户的操作系统,因此可能两个人同时登陆并编辑此文件,如果A进入系统开始编辑1.txt文件,则会出现.1.txt.swp,当A还没编辑完但B也想进去编辑时,因为此文件的目录中存在.1.txt.swp,则就会出现上图的界面;
(2)非正常关闭文件;
 
图中最后一行说明了我们此时可以采取的几个动作:
(1)o:以只读方式打开;
(2)R:恢复,即从swp文件中恢复,但是swp文件不会随着vim关闭而删除,需要手动删除;
(3)d:删除swp文件;
(4)q:退出vim;
 
四、vim记录及默认配置文件
 
 
/etc/vimrc文件为全局vim配置文件;
 
1.如果我们用xiazdong账户使用vim后,在/home/xiazdong就会出现.viminfo文件,此文件用来作为vim的日志,记录用户使用vim打开了什么文件,做了什么操作;
2.如果xiazdong账户想要配置vim的默认环境,则可以在/home/xiazdong创建.vimrc,并且配置一些特征,比如显示行号,语法检查等;
一般使用如下配置:

set hlsearch
set backspace=2
set autoindent
set nu
set ruler
set showmode
set bg=dark
syntax on

 
 
五、Visual Block功能
 
可以用于块复制;
(1)CTRL+v:开始复制块;
(3)y:复制块;
(4)p:黏贴块;
(5)d:删除块;
 
 
 
 
六、同时编辑多个文件
 
多文件编辑的好处是能够将一个文件的某些内容yy后,p到另一个文件中;
 
vim file1 file2 即可同时编辑两个文件,但是屏幕中同时只会出现一个文件内容,需要进行切换;
(1):n:向下切换;
(2):N:向上切换;
(3):files:列出当前编辑的所有文件;
 
七、多窗口编辑
 
如下图:一个界面能够显示多个文件内容;
 
 
 
(1) :sp :打开当前文件;
(2) :sp filename:打开filename文件;
 
(1)CTRL+w+↓:光标切换到下一个窗口;
(2)CTRL+w+↑:光标切换到上一个窗口;
(3):q:关闭光标所在的窗口;
 
 
八、编码问题
 
 
可能会出现乱码问题,解决方法:保持终端的字符编码与文件的字符编码一致!
tty1~tty6不支持显示中文,因此在tty1~tty6中显示中文必出现乱码;
设置终端的字符编码:
 
 
编码转换命令:iconv
iconv -f 文件的原本编码 -t 文件的新编码 filename -o newfilename
比如有一个big5编码的文件:1.big5,要转换成utf8的文件:2.utf8,则: iconv -f big5 -t utf8 1.big5 -o 2.utf8
 
 
来源:http://www.cnblogs.com/iqian/articles/5243005.html

Linux vi入门必备的更多相关文章

  1. CTF必备技能丨Linux Pwn入门教程——stack canary与绕过的思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  2. CTF必备技能丨Linux Pwn入门教程——PIE与bypass思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  3. CTF必备技能丨Linux Pwn入门教程——格式化字符串漏洞

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  4. CTF必备技能丨Linux Pwn入门教程——利用漏洞获取libc

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  5. CTF必备技能丨Linux Pwn入门教程——调整栈帧的技巧

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  6. CTF必备技能丨Linux Pwn入门教程——ROP技术(下)

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  7. CTF必备技能丨Linux Pwn入门教程——ROP技术(上)

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  8. CTF必备技能丨Linux Pwn入门教程——ShellCode

    这是一套Linux Pwn入门教程系列,作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的一些题目和文章整理出一份相对完整的Linux Pwn教程. 课程回顾>> Linu ...

  9. CTF必备技能丨Linux Pwn入门教程——栈溢出基础

    这是一套Linux Pwn入门教程系列,作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的一些题目和文章整理出一份相对完整的Linux Pwn教程. 课程回顾>>Linux ...

随机推荐

  1. 前端相关的seo技术

    相信大部分的前端开发人员应该深知seo对我们的重要性,所以个人认为平台在开发初期就应该要考虑好seo优化的问题,不然做出来的页面,就算是效果很炫,功能很强,但是对搜索引擎也不友善.如果等到成熟时期再来 ...

  2. CarDAQ-Plus

    Overview CarDAQ-Plus is the most validated and accepted J2534 device in the world. It has been on th ...

  3. 【转】工科男IT职场求生法则

    转自:http://www.36dsj.com/archives/3459 我在IT职场打滚超过10年了,从小小的程序员做到常务副总.相对于其它行业,IT职场应该算比较光明的了,但也陷阱重重,本文说说 ...

  4. jQuery循环滚动新闻列表

    最近由于项目原因,学习了下jquery,实现了一个小小的功能,就是点击公告的上一条下一条来查看滚动条.具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DT ...

  5. 2015UESTC 暑假集训总结

    day1: 考微观经济学去了…… day2: 一开始就看了看一道题目最短的B题,拍了半小时交了上去wa了 感觉自己一定是自己想错了,于是去拍大家都过的A题,十分钟拍完交上去就A了 然后B题写了一发暴力 ...

  6. C#取真实IP地址及分析

    说一哈,我也是转来的,不是想骗PV,方便自己查而已! 目前网上流行的所谓"取真实IP地址"的方法,都有bug,没有考虑到多层透明代理的情况. 多数代码类似: string IpAd ...

  7. Circle-Progress-View

    https://github.com/jakob-grabner/Circle-Progress-View

  8. android安卓 SQLite教程:内部架构及SQLite使用办法

    SQLite 介绍 SQLite一个非常流行的嵌入式数据库,它支持SQL语言,并且只利用很少的内存就有很好的性能.由于JDBC不适合手机这种内存受限设备,所以Android开发人员需要学习新的API ...

  9. iOS开发——动画OC篇&知识点总结

    图层与动画知识点总结 1.Core Animation 非娱乐类的软件都会用到的动画,操作简单. 2.Quartz 2D绘图 是一个2D绘图引擎. (1) 绘图Context是一个绘图的目标对象,定义 ...

  10. 如何在Fedora或CentOS上使用Samba共享

    如今,无论在家里或者是办公场所,不同的电脑之间共享文件夹已不是什么新鲜事了.在这种趋势下,现代操作系统通过网络文件系统的方式使得电脑间数据的交换变得简单而透明.如果您工作的环境中既有微软的Window ...