- 浏览: 211505 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (391)
- java (18)
- python (3)
- ruby (4)
- linux (48)
- 网络 (9)
- 前端 (2)
- 社会、文化、哲学、人生、百态 (0)
- 工具 (10)
- 下载 (0)
- 常用地址 (0)
- tracert (0)
- mysql (8)
- 开源相关收藏 (1)
- 模块查看依懒 (1)
- watch使用 (1)
- Tcpdump (2)
- easy_install安装 (1)
- 构造redis批量删除脚本 (1)
- MYSQL 性能测试 (1)
- JAVA code encode utf-8 (1)
- linux nginx awk 实时 每妙 (1)
- mkpasswd (1)
- spring security oauth (1)
- jmap dump java memory Analyzer (1)
- JAVA DUMP (1)
- swap linux 过高 解决 (1)
- SWAP (1)
- jmap jstat jstack dump (1)
- java jconsole 的使用 (1)
- git 常用 (1)
- MYSQL 索引 动态 唯一 (1)
- TCP 三次握手 四次挥手 (1)
- linux date (1)
- 删除 空行 注释行 (1)
- maven3 yum linux install repository (1)
- linux git 搭建 (1)
- linux sar eth1 查看 流量 (1)
- sar (1)
- netstat ip 过滤 常用脚本 (1)
- Tcpdump 包分析网络连接过程 (1)
- net ipv4 tcp time wait tw recycle (0)
- /etc/sysctl.conf linux 网络 配置 (1)
- ss 网络连接查看 (比netstat 快很多,实时性牺牲) (1)
- MYSQL 关键字 (1)
- Linux 下多核CPU知识 (1)
- top (1)
- 令牌 证书 (1)
- mysql unix timestamp (1)
- 端口扫描 nc nmap (1)
- 204 http code 状态码 (1)
- ss -s ss -l (1)
- linux 常用 curl (1)
- linux sed 替换 换行 (1)
- centos yum install rpm install (1)
- spring-mvc源码解读 (1)
- 使用iftop查看实时的网络流量 (0)
- linux 命令 expect (1)
- HTTP (1)
- openssl ddif 加密 (1)
- iptables 详解 (1)
- python 虚拟化 VirtualEnv virtualenvwrapper (1)
- nginx (2)
- more less 实用技巧 (1)
- linux nginx (2)
- linux curl https ssl 证书 ca (1)
- openssl (1)
- php mysql linux (1)
- linux 虚拟机 虚拟 xen (0)
- linux 虚拟机 虚拟 xen kvm (1)
- linux perl 单行执行技巧 (1)
- mysql 查看库占用空间 表查用空间 (1)
- linux tcpdump (1)
- maven (1)
- sun.misc.Unsafe (1)
- OpenSSL生成证书 (1)
- http://blog.csdn.net/zzulp/article/details/8018751 (1)
- maven 本地 jar dependency (1)
- 计算JAVA代码行数最简单命令 sed (1)
- 常用的证书格式转换 rsa eg (1)
- 加密 解密 签名 (1)
- 分析jar包冲突 (1)
- 使用JMockit编写java单元测试 (1)
- Linux 技巧:让进程在后台可靠运行的几种方法 (1)
- 环境变量控制 (1)
- 5+ 个 tar 命令的用法,附示例 (1)
- scp自动输入密码 (1)
- ps axo pid (1)
- ppid (1)
- comm (1)
- pmem (1)
- lstart|grep mysql (0)
- lstart (1)
- etime|grep mysql (1)
- UML类图字少好理解 (1)
- HTTP经典文章 (1)
- git (1)
- Git常用命令 (1)
- LINUX 系统被攻击的分析过程 (1)
- NIO (1)
- LINUX 操作快捷键使用 (1)
- openSSL命令、PKI、CA、SSL证书原理 (1)
- shell (2)
- 转载 (1)
- mysqldump 可以直接dump->xml (1)
- VIM比较全面的文章 (1)
- eclipse regex 正则表达式 (1)
- synchronized (1)
- 锁 (1)
- java 正则表达式 regex (1)
- Reference Queue 引用 源码 (1)
- spring aop 源码 分析 (1)
- java @Cache @Transaction 注解 (1)
- spring aop (1)
- spring jdk proxy cglib 动态代理 性能比较 (1)
- spring proxy private public 代理限制 (1)
- spring transaction aop 事务 (1)
- spring autowire 注解注入 (1)
- 桥接 NAT NAT地址转换 内部网络 虚拟网络 (1)
- spring-web-mvc 源码解读 之 RequestMappingHandlerMapping (1)
- find atime mtime ctime -n n +n (1)
- android studio 快捷键初探 (1)
- android 源码阅读的计划 (1)
- 计算机网络学习-VLAN (1)
- sed 高级 合并行 (1)
- CAP 一致性 可用性 分布式容错性 (1)
- android lib so 库文件 (0)
- android lib so 库文件 移植 (1)
- android 不错的博文 (1)
- sourceinsight 源码 阅读 (1)
- Android Tab UI (1)
- 诗 (1)
- mysql 批处理 (0)
- netty 堆外内存 DirectByteBuffer (1)
- netty 并发 百万 推送 (1)
- Linux操作系统中内存buffer和cache的区别 (1)
- maven intellij target bytecode version (1)
- linux sleep()的实现原理 (1)
- android (2)
- javadoc 代码注释规范 (1)
- spring 自动注入bean auto (1)
- Photoshop CS6常用快捷键 (1)
- 股票 数据 机器 分析 (1)
- 批处理 (1)
- mysql -e (1)
- char (1)
- Unicode (1)
- 编码 (1)
- utf8 (1)
- utf-8 (1)
- utf16 (1)
- utf-16 (1)
- IntelliJ IDEA (1)
- ide (1)
- idea (1)
- intellij (1)
- 文件 (1)
- 目录 (1)
- 源代码 (1)
- CountDownLatch (1)
- CyclicBarrier (1)
- Semaphore (1)
- spring (1)
- linux 查看不同进制文件 (1)
- WebMvcConfigurationSupport (1)
- sdkman工具的使用 (1)
- http header (1)
- LINUX系统优化 (1)
最新评论
-
gelongmei:
威武我大酒神
shell脚本不换行刷新数据
精进Vim的使用(一)
前言http://blog.csdn.net/hitlion2008/article/details/6884694
我们是开发者,没错。我们要开发程序,也没错。开发程序的第一个步骤就是写程序,也就是编辑源程序代码。因此,程序开发跟编辑器有关系。一个良好的编辑器能够大大的提高的你写代码的速度,也许你不相信,真的有很多的“牛人”在用Notepad(记事本)写代码。虽然现在有许多的IDE(Integrated Development Environment集成开发环境--一种能把源码的编辑,编译,调试和配置都集成在一起的开发工具集),但是公认的世界上最好的二个源代码编辑器就是Vim和Emacs。经过几十年的发展,现在它们都已经变成了一个家族,也即以Vim为代表的Vi家族,和以Emacs为代表的Emacs家族,在家族内部还有许多其他的克隆版本,而且它们都能跨平台,在各种主流的操作系统平台都有可用的版本,如Windows,Unix/Linux和Mac OS等。
我在大学三年级的时候开始接触这二个编辑器,首先的感觉就是不习惯不适应,但慢慢当过了几天后就会发现它们的强大之处和魅力所在,然后就慢慢的习惯了它们甚至喜欢上了它们。而且,在全世界范围内,特别是Unix/Linux社区,人们对这二个编辑器争论不止,各自的追随者都称自己的是最好的,吵了几十年,也没有结论,因为它们都是最好的。
个人认为,Emacs更适合于写代码和多个源码文件的管理,因为很早以前Emacs本身就是一个操作系统,它更像一个IDE,可以编辑,编译,调试和运行程序。而Vim更适合于编辑已写好的文件,因为它的移动,查找,替换是最有效率的;或者,Vim适合于应付单个源码文件(甚至有一段时间我先用Emacs写源码,然后再用Vim来修改)。后来不知道为什么,用Vim的次数比Emacs多,后来就对Vim相对熟悉一些,到现在Emacs已经有一年多没有用过了。
所以,为了不误导读者,这里只谈谈Vim的使用方法和技巧。
另外,Vim经过了这么多年的发展,又是世界上最强悍的编辑器之一,一篇博客是很难讲的很清的,所以计划分三篇来讲:
Vim的基本使用方法和初级编辑
高级进阶技巧
网络资源和Vim Script(脚本)
这是第一篇,至于后面二篇会在以后的日子里慢慢的酝酿和总结。即使这三篇也不可能把Vim讲透彻,因为这实在是太多内容了,O'reilly有一本书叫做《Learning the Vi and Vim Editor 7th》有三四百页厚,专门来讲Vim的,也有中文版了,有兴趣的朋友,建议去买一本。也可以下载一本(学习用,不犯法,唉,学习的成本真TM低啊!要是iPhone 4S或是Nexus Prime也能随便从网上下载下来就好了,哪怕只用作学习呢!)。
说了这么多废话,现在开始进入正题。
这篇里面介绍如何获取Vim,如何安装,如何打开文件,并以最实用的方式来讲述基本的编辑命令。
注:除非特说明,本文都是在Linux(Fedora)的Terminal下面使用,所以其他平台的启动方式可能会不同。但我想不会成为问题的,必要的时候请Google。
如何获取和安装Vim
方法不尽一致,主要取决于你所用的操作系统平台,和你的个人使用习惯,也就是说你想麻烦些还是省事儿些,麻烦些通常就是下载Vim的源码包(它是开源的),然后自己编译。省事儿些就是下载自安装包或用软件维护工具(Unix/Linux)。
Windows用户, 到官方网站下载安装包,然后像安装其他Windows软件一样“下一步”+“Okay”就安装完成了
Mac OS用户,最好还是参考官方安装文档,或是Google一下,这个没有试过,不敢乱讲。不过,貌似Mac OS上已带有Vi的一个克隆版本,什么名字忘记了,可以去查查(等哥发达了,能买得起苹果的电脑时,一定补上这块)
Unix/Linux用户,这个平台方式就比较多了,也比较灵活
如前所述,可以下载源码包,自己编译,最麻烦的方式,但也能尝到很多东西
下载RPM软件包,然后用rpm工具来安装,这是较麻烦的方式
[plain] view plaincopyprint?
#rpm -ivh package.rpm
直接用系统中的软件维护工具来搞定,这是最省事的方式,比如用yum, emerge, apt-get等工具
[plain] view plaincopyprint?
#yum install vim gvim vimdiff -y
然后等它显示Install Complete就可以了。
对于如何获取和安装,也可以参考官方的文档或是网络上的资源。
进入Vim和创建文件
进入Vim很简单,如果安装完毕,那么直接在Linux的Terminal下面输入vim相关命令即可:
[plain] view plaincopyprint?
#vim
#vim file.txt
#gvim
#gvim file.txt
以上分别是在终端上以字符模式进入Vim并创建一个未命名文件,打开或创建file.txt文件;以GUI的形式创建一个未命名文件,以GUI形式打开或创建file.txt
像其他Unix/Linux命令一样,Vim也有许多的选项,说实话,平时也不怎么用,所以请参考man或是参看帮助
[plain] view plaincopyprint?
#man vim
#vim --help
然后看到的就是Vim的主要页面窗口。接下来就可以使用它了。但在使用之前必须先理解Vim的工作方式:
首先,Vim是一个全屏幕的字符编辑器,也就是说没有菜单。因为它出生于那个UNIX黑乎乎的字符终端时代,所以它没有菜单,没有鼠标支持的左键和右键,甚至键盘上连方向键,Home, End, PageUp, PageDown, Insert/Replace也都没有。所以Vim的所有编辑命令都是常见的字母,比如:a, e, c, d, y, p, u, x, r, ~等等。它只能通过(GUI除外)这些字母式的编辑命令来进行各种编辑,比如插入,替换,删除,移动,查找等。
其次,Vim的有二个工作模式:一个是编辑模式,也就是说像Notepad一样,在键盘上面打什么,编辑器里面就会出现什么;另外一个就是命令模式,也就是说这种情况下,某些按键会被当作编辑命令。因为它的编辑命令都是普通的字母,所以为了让这些字母成为编辑命令,就需要设定一个模式,让其只在命令模式下是编辑命令,而在编辑模式下只是普通的字符。从编辑模式可以按Esc键(美式键盘上面最左上角的那个,其他键盘我就不知道了)进入命令模式;而在命令模式时,只要使用了插入相关的命令后,会自动切换到编辑模式。
退出Vim编辑器和其他有关文件写入的命令
退出稍稍有些不同,没有那么显而易见。就需要用到Vim专属的命令了:
:q和:qa --用法是先按Esc切换到命令模式,然后输入:(冒号)q(按回车),这样就可以退出当前编辑,回到Terminal中,其中a的含义是全部,也就是说:qa是退出所有文件
:x和:xa -- 用法与上面类似。它也是退出一个或所有文件,它与q的区别在到,如果文件没有被修改,:x命令不会改变文件的“最后修改时间Last modified”属性。这对于使用make的编译系统是有意义的,因为如果文件如果没有更新,判断依据是“最后修改时间”是否较上次有改变,是不会重新编译文件的。如果你的项目只有几十个文件的话,重新编译与否可能看起来没什么区别,但对于大项目,比如操作系统而言,编译一次要几个小时,所以能不重新编译就不要浪费时间。而:x命令就能避免修改文件的属性,当文件没有变化时(包括,用u/U命令回退操作)。所以这个命令是我一直都使用的退出命令,谁让咱只写程序呢!。对于其他的情况,这二个命令都一样儿!
ZZ命令--与:q一样儿。这个我只在初学的时候用了几次,后来再也没有用过,敲起来太麻烦了。
除了上面讲的退出命令外,还有一些其他的命令,比如,
:w -- 把Buffer写入文件,也就是保存
:e filename -- 打开,或创建filename,并去编辑它,如果是:e(也就是不带参数)则停留在当前页面。
:e!, :q!, :w!--!(叹号)的作用是强行执行的意思,所以:e!就是恢复到上一次保存的状态;:q!是强行保存退出,即使你在编辑一个只读文件;:w!是强行写入,强行保存,即使你在编辑只读文件。
基本编辑命令
基本的命令包括,插入,删除,替换
插入命令:插入命令执行的后,会留在编辑模式
a -- 在当前光标后面插入字符,如a[cursor]b, 此时如果用命令a, 然后插入c, 那么结果是abc
A -- 在行尾插入
i -- 在当前光标处插入字符,如a[cursor]b, 此时如果用命令i, 然后插入c, 那么结果是acb
I--在行首插入
删除命令:删除命令执行后会停留在命令模式
d--这个命令要与移动命令组合使用才行,比如:dw删除一个连串非空格字符,de删除到词尾,dd删除当前行等等。词的定义是一连串的字母或数字,不包括空格和标点。
D -- 删除当前光标到行尾
x --删除当前光标所在的字符
替换命令:
r--替换当前字符,一次只能替换一个字符,替换完后仍在命令模式
c--要与移动命令一起用,比如:cw改变一个单词,ce改变到下一个空格,cc改变当前行
C--改变当前光标至行尾。c与C的改变意思是,把指定的字串删除,然后把光标停在所删除的第一个字符的位置,并处于编辑模式。也就是说它与d和D的区别在于,c和C会进入编辑模式
s--替换当前字符,并处于编辑模式
S--改变整个当行,并处于编辑模式
拷贝:
y--要与移动命令一起使用
yy--复制当前行
Y--复制当前行
粘贴:
p--粘贴已复制的字串到光标后面
P--粘贴已复制的字串到光标前面
其他命令:
o(小写字母o)--在当前行下面编辑新的一行
O(大写字母O)--在当前行上面编辑新的一行
.(逗点)--重复上一次的编辑命令
~(波浪)--数字键1左边的那个。改变大小写,一次一个字母。
>>--增加缩进
<<--减少缩进,这二个命令对于程序代码来讲是非常实用的
xp--互换二个字符,光标所指的与其后面的字符,如ab会变成ba
J--连接当前行与其下一行,也就是把当前行下面的一行添加到这一行的行尾。
撤消命令:
u--撤消上一次命令操作
U--撤消在一行上面的所有操作,要把光标放在编辑动作所发生的行才有效。这个不是很常用,记得很久很久没有用过了
移动命令
基本移动命令:
h--将光标向左移动一个字符,相当于左方向键
j--将光标向上移动一个字符,相当于上方向键
k--将光标向下移动一个字符,相当于下方向键
l--将光标向右移动一个字符,相当于右方向键
当前行内移动:
w--向前移动光标至一连串非空格尾,光标会停在该词的最后一个字符 上面
e--向前移动光标到词尾,光标会停在该词的最后一个字符上面
b--向后移动一个字
$--移动光标到行尾
^--移动光标到行首第一个非空字符
0(数字0)--移动光标到行首
高级移动命令:
^D(Ctrl+D)--向下滚动半屏
^U(Ctrl+U)--向上滚动半屏
^F(Ctrl+F)--向下滚动一屏
^B(Ctrl+B)--向上滚动一屏
z.--把当前行滚动至屏幕正中间
z---把当前行滚动到屏幕最下方
z Enter--把当前行滚动至屏幕最上方
^L(Ctrl+L)--刷新屏幕
H--移动光标到当前屏幕最上面的一行
L--移动光标到当前屏幕最下面的一行
G--移动光标到文章最后面的一行
Enter --- 移动到下一行第一个字符
移动到下一行第一个字符
移动到上一行第一个字符
:line_number--移动至第line_number行,这是程序员最常用的命令,如:6,则跳到源文件第6行
搜索式移动:
/pattern--搜索pattern,并定位光标在下一个pattern的第一个字符上面
n--重复/pattern的搜索,也即寻找下一个匹配
N--以相反方向重复/pattern的搜索,也即寻找上一个匹配
?--向后面搜索
/--向前面搜索
fx--在当前行内搜索字符x,停光标在下一个x上面,这里的x代码任何字符
Fx--在当前行内搜索前一个x,停光标在前一个x上面,x代码任何字符
tx--在当前行内搜索x,光标停在x的前一个字符上面,x代码任何字符
Tx--在当前行内搜索前一个x,停光标在前一个x的前一个字符上面,x代码任何字符
;(分号)--在相同方向重复上一个搜索命令
,(逗号)--在相反方向重复上一个搜索命令
*(乘号,或叫星号)--搜索当前光标所在的词,相当于对当前词进行/搜索,比如,光标停在词google内的任何字符上,那么*命令就相当于/google
数字组合显神奇
Vim最最神奇,也是吸引人们的地方在于,它可以把数字与编辑命令一起使用,以达到最高效的编辑方式。对于绝大多数命令来讲,所加上的数字是重复的意思,比如
5i--就是插入5次
6j--就是向上连续移动6次,相当于你按了6次j
5e--向前移动5个单词
6b-向后移动6个单词
8dd--删除8行
8yy--拷贝8行
8G--跳到第8行,与:8作用一样
能组合数字是Vim最能体现效率和神奇的地方,这里需要平时使用的时候多多体会,其中奥妙无限,却不是一句二句能讲的清的。
至此,如果上面这些命令全部都能熟练应用,就已经算是一个Vim的中级用户了,对于大多数人来讲,这些命令已经足够。如果能熟练应用这些命令就可以达到双手不离开键盘的牛人式的编程方式^_^。如果坚持练习,几个星期内就可以这些命令搞熟练,然后就可以学习高级的操作,比如窗口控制,多Tab页控制,扩充Script脚本等等。
我们是开发者,没错。我们要开发程序,也没错。开发程序的第一个步骤就是写程序,也就是编辑源程序代码。因此,程序开发跟编辑器有关系。一个良好的编辑器能够大大的提高的你写代码的速度,也许你不相信,真的有很多的“牛人”在用Notepad(记事本)写代码。虽然现在有许多的IDE(Integrated Development Environment集成开发环境--一种能把源码的编辑,编译,调试和配置都集成在一起的开发工具集),但是公认的世界上最好的二个源代码编辑器就是Vim和Emacs。经过几十年的发展,现在它们都已经变成了一个家族,也即以Vim为代表的Vi家族,和以Emacs为代表的Emacs家族,在家族内部还有许多其他的克隆版本,而且它们都能跨平台,在各种主流的操作系统平台都有可用的版本,如Windows,Unix/Linux和Mac OS等。
我在大学三年级的时候开始接触这二个编辑器,首先的感觉就是不习惯不适应,但慢慢当过了几天后就会发现它们的强大之处和魅力所在,然后就慢慢的习惯了它们甚至喜欢上了它们。而且,在全世界范围内,特别是Unix/Linux社区,人们对这二个编辑器争论不止,各自的追随者都称自己的是最好的,吵了几十年,也没有结论,因为它们都是最好的。
个人认为,Emacs更适合于写代码和多个源码文件的管理,因为很早以前Emacs本身就是一个操作系统,它更像一个IDE,可以编辑,编译,调试和运行程序。而Vim更适合于编辑已写好的文件,因为它的移动,查找,替换是最有效率的;或者,Vim适合于应付单个源码文件(甚至有一段时间我先用Emacs写源码,然后再用Vim来修改)。后来不知道为什么,用Vim的次数比Emacs多,后来就对Vim相对熟悉一些,到现在Emacs已经有一年多没有用过了。
所以,为了不误导读者,这里只谈谈Vim的使用方法和技巧。
另外,Vim经过了这么多年的发展,又是世界上最强悍的编辑器之一,一篇博客是很难讲的很清的,所以计划分三篇来讲:
Vim的基本使用方法和初级编辑
高级进阶技巧
网络资源和Vim Script(脚本)
这是第一篇,至于后面二篇会在以后的日子里慢慢的酝酿和总结。即使这三篇也不可能把Vim讲透彻,因为这实在是太多内容了,O'reilly有一本书叫做《Learning the Vi and Vim Editor 7th》有三四百页厚,专门来讲Vim的,也有中文版了,有兴趣的朋友,建议去买一本。也可以下载一本(学习用,不犯法,唉,学习的成本真TM低啊!要是iPhone 4S或是Nexus Prime也能随便从网上下载下来就好了,哪怕只用作学习呢!)。
说了这么多废话,现在开始进入正题。
这篇里面介绍如何获取Vim,如何安装,如何打开文件,并以最实用的方式来讲述基本的编辑命令。
注:除非特说明,本文都是在Linux(Fedora)的Terminal下面使用,所以其他平台的启动方式可能会不同。但我想不会成为问题的,必要的时候请Google。
如何获取和安装Vim
方法不尽一致,主要取决于你所用的操作系统平台,和你的个人使用习惯,也就是说你想麻烦些还是省事儿些,麻烦些通常就是下载Vim的源码包(它是开源的),然后自己编译。省事儿些就是下载自安装包或用软件维护工具(Unix/Linux)。
Windows用户, 到官方网站下载安装包,然后像安装其他Windows软件一样“下一步”+“Okay”就安装完成了
Mac OS用户,最好还是参考官方安装文档,或是Google一下,这个没有试过,不敢乱讲。不过,貌似Mac OS上已带有Vi的一个克隆版本,什么名字忘记了,可以去查查(等哥发达了,能买得起苹果的电脑时,一定补上这块)
Unix/Linux用户,这个平台方式就比较多了,也比较灵活
如前所述,可以下载源码包,自己编译,最麻烦的方式,但也能尝到很多东西
下载RPM软件包,然后用rpm工具来安装,这是较麻烦的方式
[plain] view plaincopyprint?
#rpm -ivh package.rpm
直接用系统中的软件维护工具来搞定,这是最省事的方式,比如用yum, emerge, apt-get等工具
[plain] view plaincopyprint?
#yum install vim gvim vimdiff -y
然后等它显示Install Complete就可以了。
对于如何获取和安装,也可以参考官方的文档或是网络上的资源。
进入Vim和创建文件
进入Vim很简单,如果安装完毕,那么直接在Linux的Terminal下面输入vim相关命令即可:
[plain] view plaincopyprint?
#vim
#vim file.txt
#gvim
#gvim file.txt
以上分别是在终端上以字符模式进入Vim并创建一个未命名文件,打开或创建file.txt文件;以GUI的形式创建一个未命名文件,以GUI形式打开或创建file.txt
像其他Unix/Linux命令一样,Vim也有许多的选项,说实话,平时也不怎么用,所以请参考man或是参看帮助
[plain] view plaincopyprint?
#man vim
#vim --help
然后看到的就是Vim的主要页面窗口。接下来就可以使用它了。但在使用之前必须先理解Vim的工作方式:
首先,Vim是一个全屏幕的字符编辑器,也就是说没有菜单。因为它出生于那个UNIX黑乎乎的字符终端时代,所以它没有菜单,没有鼠标支持的左键和右键,甚至键盘上连方向键,Home, End, PageUp, PageDown, Insert/Replace也都没有。所以Vim的所有编辑命令都是常见的字母,比如:a, e, c, d, y, p, u, x, r, ~等等。它只能通过(GUI除外)这些字母式的编辑命令来进行各种编辑,比如插入,替换,删除,移动,查找等。
其次,Vim的有二个工作模式:一个是编辑模式,也就是说像Notepad一样,在键盘上面打什么,编辑器里面就会出现什么;另外一个就是命令模式,也就是说这种情况下,某些按键会被当作编辑命令。因为它的编辑命令都是普通的字母,所以为了让这些字母成为编辑命令,就需要设定一个模式,让其只在命令模式下是编辑命令,而在编辑模式下只是普通的字符。从编辑模式可以按Esc键(美式键盘上面最左上角的那个,其他键盘我就不知道了)进入命令模式;而在命令模式时,只要使用了插入相关的命令后,会自动切换到编辑模式。
退出Vim编辑器和其他有关文件写入的命令
退出稍稍有些不同,没有那么显而易见。就需要用到Vim专属的命令了:
:q和:qa --用法是先按Esc切换到命令模式,然后输入:(冒号)q(按回车),这样就可以退出当前编辑,回到Terminal中,其中a的含义是全部,也就是说:qa是退出所有文件
:x和:xa -- 用法与上面类似。它也是退出一个或所有文件,它与q的区别在到,如果文件没有被修改,:x命令不会改变文件的“最后修改时间Last modified”属性。这对于使用make的编译系统是有意义的,因为如果文件如果没有更新,判断依据是“最后修改时间”是否较上次有改变,是不会重新编译文件的。如果你的项目只有几十个文件的话,重新编译与否可能看起来没什么区别,但对于大项目,比如操作系统而言,编译一次要几个小时,所以能不重新编译就不要浪费时间。而:x命令就能避免修改文件的属性,当文件没有变化时(包括,用u/U命令回退操作)。所以这个命令是我一直都使用的退出命令,谁让咱只写程序呢!。对于其他的情况,这二个命令都一样儿!
ZZ命令--与:q一样儿。这个我只在初学的时候用了几次,后来再也没有用过,敲起来太麻烦了。
除了上面讲的退出命令外,还有一些其他的命令,比如,
:w -- 把Buffer写入文件,也就是保存
:e filename -- 打开,或创建filename,并去编辑它,如果是:e(也就是不带参数)则停留在当前页面。
:e!, :q!, :w!--!(叹号)的作用是强行执行的意思,所以:e!就是恢复到上一次保存的状态;:q!是强行保存退出,即使你在编辑一个只读文件;:w!是强行写入,强行保存,即使你在编辑只读文件。
基本编辑命令
基本的命令包括,插入,删除,替换
插入命令:插入命令执行的后,会留在编辑模式
a -- 在当前光标后面插入字符,如a[cursor]b, 此时如果用命令a, 然后插入c, 那么结果是abc
A -- 在行尾插入
i -- 在当前光标处插入字符,如a[cursor]b, 此时如果用命令i, 然后插入c, 那么结果是acb
I--在行首插入
删除命令:删除命令执行后会停留在命令模式
d--这个命令要与移动命令组合使用才行,比如:dw删除一个连串非空格字符,de删除到词尾,dd删除当前行等等。词的定义是一连串的字母或数字,不包括空格和标点。
D -- 删除当前光标到行尾
x --删除当前光标所在的字符
替换命令:
r--替换当前字符,一次只能替换一个字符,替换完后仍在命令模式
c--要与移动命令一起用,比如:cw改变一个单词,ce改变到下一个空格,cc改变当前行
C--改变当前光标至行尾。c与C的改变意思是,把指定的字串删除,然后把光标停在所删除的第一个字符的位置,并处于编辑模式。也就是说它与d和D的区别在于,c和C会进入编辑模式
s--替换当前字符,并处于编辑模式
S--改变整个当行,并处于编辑模式
拷贝:
y--要与移动命令一起使用
yy--复制当前行
Y--复制当前行
粘贴:
p--粘贴已复制的字串到光标后面
P--粘贴已复制的字串到光标前面
其他命令:
o(小写字母o)--在当前行下面编辑新的一行
O(大写字母O)--在当前行上面编辑新的一行
.(逗点)--重复上一次的编辑命令
~(波浪)--数字键1左边的那个。改变大小写,一次一个字母。
>>--增加缩进
<<--减少缩进,这二个命令对于程序代码来讲是非常实用的
xp--互换二个字符,光标所指的与其后面的字符,如ab会变成ba
J--连接当前行与其下一行,也就是把当前行下面的一行添加到这一行的行尾。
撤消命令:
u--撤消上一次命令操作
U--撤消在一行上面的所有操作,要把光标放在编辑动作所发生的行才有效。这个不是很常用,记得很久很久没有用过了
移动命令
基本移动命令:
h--将光标向左移动一个字符,相当于左方向键
j--将光标向上移动一个字符,相当于上方向键
k--将光标向下移动一个字符,相当于下方向键
l--将光标向右移动一个字符,相当于右方向键
当前行内移动:
w--向前移动光标至一连串非空格尾,光标会停在该词的最后一个字符 上面
e--向前移动光标到词尾,光标会停在该词的最后一个字符上面
b--向后移动一个字
$--移动光标到行尾
^--移动光标到行首第一个非空字符
0(数字0)--移动光标到行首
高级移动命令:
^D(Ctrl+D)--向下滚动半屏
^U(Ctrl+U)--向上滚动半屏
^F(Ctrl+F)--向下滚动一屏
^B(Ctrl+B)--向上滚动一屏
z.--把当前行滚动至屏幕正中间
z---把当前行滚动到屏幕最下方
z Enter--把当前行滚动至屏幕最上方
^L(Ctrl+L)--刷新屏幕
H--移动光标到当前屏幕最上面的一行
L--移动光标到当前屏幕最下面的一行
G--移动光标到文章最后面的一行
Enter --- 移动到下一行第一个字符
移动到下一行第一个字符
移动到上一行第一个字符
:line_number--移动至第line_number行,这是程序员最常用的命令,如:6,则跳到源文件第6行
搜索式移动:
/pattern--搜索pattern,并定位光标在下一个pattern的第一个字符上面
n--重复/pattern的搜索,也即寻找下一个匹配
N--以相反方向重复/pattern的搜索,也即寻找上一个匹配
?--向后面搜索
/--向前面搜索
fx--在当前行内搜索字符x,停光标在下一个x上面,这里的x代码任何字符
Fx--在当前行内搜索前一个x,停光标在前一个x上面,x代码任何字符
tx--在当前行内搜索x,光标停在x的前一个字符上面,x代码任何字符
Tx--在当前行内搜索前一个x,停光标在前一个x的前一个字符上面,x代码任何字符
;(分号)--在相同方向重复上一个搜索命令
,(逗号)--在相反方向重复上一个搜索命令
*(乘号,或叫星号)--搜索当前光标所在的词,相当于对当前词进行/搜索,比如,光标停在词google内的任何字符上,那么*命令就相当于/google
数字组合显神奇
Vim最最神奇,也是吸引人们的地方在于,它可以把数字与编辑命令一起使用,以达到最高效的编辑方式。对于绝大多数命令来讲,所加上的数字是重复的意思,比如
5i--就是插入5次
6j--就是向上连续移动6次,相当于你按了6次j
5e--向前移动5个单词
6b-向后移动6个单词
8dd--删除8行
8yy--拷贝8行
8G--跳到第8行,与:8作用一样
能组合数字是Vim最能体现效率和神奇的地方,这里需要平时使用的时候多多体会,其中奥妙无限,却不是一句二句能讲的清的。
至此,如果上面这些命令全部都能熟练应用,就已经算是一个Vim的中级用户了,对于大多数人来讲,这些命令已经足够。如果能熟练应用这些命令就可以达到双手不离开键盘的牛人式的编程方式^_^。如果坚持练习,几个星期内就可以这些命令搞熟练,然后就可以学习高级的操作,比如窗口控制,多Tab页控制,扩充Script脚本等等。
相关推荐
这个系列教程全面地介绍了vim的高级特性,旨在提升用户对vim的熟练程度和使用效率,对于开发者来说是一份宝贵的资源。通过学习这些内容,读者不仅可以掌握vim的基本操作,还能深入了解其高级功能,从而更好地利用vim...
- **VIM**(Vi Improved)是一款在Unix环境下广泛使用的全屏文本编辑器。几乎每一台Unix机器都会预装VIM,这使得它成为了用户在不同平台之间进行高效文本编辑的重要工具。 - 尽管现代Unix系统中出现了更多高级的文本...
**vim用户手册与vim使用进阶** vim,全名Vi Improved,是一款强大的文本编辑器,深受程序员和系统管理员的喜爱。它的高效性和灵活性使得熟练掌握vim成为提升文本编辑效率的重要手段。本篇将深入探讨vim的基础知识及...
为了提升其编辑体验,用户可以通过安装各种插件来扩展其功能,其中Vim插件就是一种非常实用的选择。Vim是一款高度可配置的文本编辑器,以其高效的操作方式和丰富的命令集闻名。将Vim集成到Notepad++中,可以使熟悉...
Vim 是一款功能丰富而强大的文本编辑器,其代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中得到非常广泛的使用。Vim 能够大大提高程序员的工作效率。对于 Vim 高手来说,Vim 能以与思考同步的速度...
VIM是一个功能强大的文本编辑器,其使用方法涵盖了移动光标、文本编辑、命令执行等多个方面。在VIM的使用中,移动光标是基本操作之一。用户可以通过按键“h”向左移动光标,“j”向下移动光标,“k”向上移动光标,...
vim使用教程vim使用教程vim使用教程vim使用教程vim使用教程vim使用教程vim使用教程vim使用教程
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。 VIM是自由软件。 Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被...
由于提供的文件信息中包含了Vim 8.2的PDF用户手册的结构和内容概览,我们可以从提供的内容中提炼出关于Vim编辑器的知识点,这些知识点覆盖了Vim的基本使用、编辑技巧、高级功能以及如何在不同情况下高效使用Vim。...
### vim使用进阶:使用vim提高你的文本编辑效率 #### 序言 Vim是一款功能强大的文本编辑器,尤其受到程序员的喜爱。对于那些从其他编辑器(如Source Insight)转向vim的用户而言,初期可能会遇到一定的挑战。然而...
两篇很牛的vim使用技巧 vim 技巧 chinaunix
"vim-configure.tar.gz_vim_vim_configure" 是一个包含了 Vim 配置文件的压缩包,旨在帮助用户优化 Vim 的使用体验,提供自动提示、补全功能以及代码高亮等特性。 在 Vim 中配置这些功能,可以使编辑效率大幅提升。...
Vim 使用手册 本手册旨在帮助用户更好地使用 Vim 编辑器,提高编辑效率。作者 Bram Moolenaar 和译者 ZhaoRuFei 希望通过本手册帮助读者熟悉 Vim 的使用,掌握 Vim 的技巧和规律。 在使用 Vim 之前,需要读者理解 ...
在当今的软件开发领域,Vim是一款被广泛使用的文本编辑器,其拥有强大的编辑功能、高度可定制性以及丰富的插件生态系统。Vim是Vi编辑器的增强版本,拥有模式化的编辑方式,能够让用户通过不同的模式进行快速有效的...
标题中的“Python-这是一个vim插件允许用户使用vim像googledoc”表明我们要讨论的是一个名为`shrvim`的Vim插件,它旨在使经典的文本编辑器Vim具有类似Google Docs的协作功能。Vim是一款高度可配置且功能强大的文本...
【vim plugin vim changes to ide update】这一主题表明我们将探讨如何使用Vim插件来提升其作为集成开发环境(IDE)的功能。在这个过程中,我们将重点分析新增的三个插件:wintagexplorer.vim、echofunc.vim以及vimrc...
vim(Vi Improved)是一款强大的文本编辑器,源自早期的vi编辑器,广泛应用于Linux和Unix系统中。它以其高效、命令行操作和丰富的功能著称,是程序员和系统管理员的必备工具。本教程将涵盖vim的基础使用、进阶技巧...
VIM(Vi IMproved)是一款强大的文本编辑器,源自经典的Vi编辑器,具有高度可配置性和扩展性。这款编辑器广泛应用于Linux、Unix以及macOS等操作系统中,因其高效的编辑功能而深受程序员和系统管理员的喜爱。"VIM官方...
本篇文章将详细探讨“vim插件-配合数字电路systemverilog编程时使用”的相关知识点。 首先,了解SystemVerilog的基本语法至关重要。SystemVerilog扩展了传统的Verilog,增加了类、包、接口、非阻塞赋值等高级特性,...