- 浏览: 209640 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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脚本等等。
相关推荐
Matlab领域上传的视频均有对应的完整代码,皆可运行,亲测可用,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作
【使用教程】 一、环境配置 1、建议下载anaconda和pycharm 在anaconda中配置好环境,然后直接导入到pycharm中,在pycharm中运行项目 anaconda和pycharm安装及环境配置参考网上博客,有很多博主介绍 2、在anacodna中安装requirements.txt中的软件包 命令为:pip install -r requirements.txt 或者改成清华源后再执行以上命令,这样安装要快一些 软件包都安装成功后才算成功 3、安装好软件包后,把anaconda中对应的python导入到pycharm中即可(不难,参考网上博客) 二、环境配置好后,开始训练(也可以训练自己数据集) 1、数据集准备 需要准备yolo格式的目标检测数据集,如果不清楚yolo数据集格式,或者有其他数据训练需求,请看博主yolo格式各种数据集集合链接:https://blog.csdn.net/DeepLearning_/article/details/127276492 更多详情介绍,见资源内的项目说明
# 基于Spring Boot和Vue的学生作业互评系统 ## 项目简介 本项目是一个基于Spring Boot和Vue框架开发的学生作业互评系统。系统主要功能包括学生作业的提交、教师作业的布置、作业的批改与评分、以及学生之间的作业互评。通过该系统,教师可以方便地管理课程和作业,学生可以在线提交作业并参与互评,从而提高作业质量和学习效果。 ## 项目的主要特性和功能 1. 用户管理 支持学生、教师和管理员三种角色的用户管理。 提供用户注册、登录、密码修改等功能。 2. 课程管理 教师可以创建和管理课程,学生可以选课。 支持课程信息的查看和编辑。 3. 作业管理 教师可以布置作业,设置作业的截止日期和评分标准。 学生可以在线提交作业,查看作业提交状态。 4. 作业批改与评分 教师可以对学生提交的作业进行批改和评分。 学生可以查看自己的作业评分和教师的评语。
PHP学生成绩查询(源代码+论文)
c语言学生信息系统
Android的多媒体框架OpenCore介绍
AutocompleteTest
2023-04-06-项目笔记-第三百一十八阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.316局变量的作用域_316- 2024-11-15
可以识别视频语音自动生成字幕SRT文件的开源 Windows-GUI 软件工具
c语言情人节的红玫瑰
c语言24点游戏源码
c语言实现的汉诺塔演示程序
android_jni操作指南
网上绝无仅有的Log分析教程及例子
Jumpserver 是一款由python编写开源的跳板机(堡垒机)系统,实现了跳板机应有的功能。基于ssh协议来管理,客户端无需安装agent。 Jumpserver 3.0 架构上和 2.0 变化较大,建议全新安装一套环境来体验。如需升级,请务必升级前进行备份。 支持常见系统: 1、redhat centos 2、debian 3、suse ubuntu 4、freebsd 5、其他ssh协议硬件设备 特点: 完全开源,GPL授权 Python编写,容易再次开发 实现了跳板机基本功能,认证、授权、审计 集成了Ansible,批量命令等 支持WebTerminal Bootstrap编写,界面美观 自动收集硬件信息 录像回放 命令搜索 实时监控 批量上传下载
# 基于Arduino框架的自动称重系统 ## 项目简介 本项目是一个基于Arduino框架的自动称重系统。它利用Arduino硬件和Adafruit的ADS1115 ADC(模数转换器)库,实现了从负载单元读取重量数据并通过串行通信将数据传输到PC或其他设备的功能。项目还包含了LCD屏幕显示和LED指示灯的控制,以及对数据库的操作和Web交互的支持。 ## 项目的主要特性和功能 1. 硬件连接与通信: 项目使用了Arduino和ADS1115 ADC之间的串行通信,实现了从负载单元读取重量数据的功能。 2. 数据处理: 通过ADC读取的重量数据被处理并转换为可读的数值,然后通过串行端口发送到PC或其他设备。 3. 用户界面: 包含了LCD屏幕显示和LED指示灯的控制,用于实时显示重量数据或指示重量状态。 4. 数据库操作: 项目支持通过串行通信与数据库交互,实现数据的存储和查询。
西安旅游管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
python 显示二维码如下方法 import argparse import qrcode as qrcode import matplotlib.pyplot as plt filename = '二维码.png' # 获取二维码 def make_qr_code(): # 接收cmd命令里面的参数 parse = argparse.ArgumentParser() parse.add_argument("--t", type=str, default = None) args = parse.parse_args() content = args.t print("generate content "+content) q = qrcode.QRCode() q.add_data(content) q.make() img = q.make_image() img.save(filename) plt.title = '登录二维码' plt.imshow(img)
浮动搜索框(SearchManager)