1.vim配置(.vimrc配置)
- 让vi命令也可以使用vim的配置,需要修改 vi /etc/bashrc 增加如下一行内容
alias vi=vim
- 在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置甚至脚本.所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,打开终端(或 terminal,或管理员命令行),输入 以下命令
vim ~/.vimrc
vim高亮配置
效果展示图:
2. 在VIM中进行文本替换
2.1. 替换当前行中的内容: : s/from/to/ (s即substitude)
命令 |
描述 |
: s/from/to/ |
将当前行中的第一个from,替换成to。如果当前行含有多个from,则只会替换其中的第一个。 |
: s/from/to/g |
将当前行中的所有from都替换成to。 |
: s/from/to/gc |
将当前行中的所有from都替换成to,但是每一次替换之前都会询问请求用户确认此操作。 |
注意:这里的from和to都可以是任何字符串,其中from还可以是正则表达式。
2.2 替换某一行的内容: :33s/from/to/g
命令 |
描述 |
:.s/from/to/g |
在当前行进行替换操作。 |
:33s/from/to/g |
在第33行进行替换操作。 |
:$s/from/to/g |
在最后一行进行替换操作。 |
2.3. 替换某些行的内容: :10,20s/from/to/g
命令 |
描述 |
:10,20s/from/to/g |
对第10行到第20行的内容进行替换。 |
:1,$s/from/to/g |
对第一行到最后一行的内容进行替换(即全部文本)。 |
:1,.s/from/to/g |
对第一行到当前行的内容进行替换。 |
:.,$s/from/to/g |
对当前行到最后一行的内容进行替换。 |
:'a,'bs/from/to/g |
对标记a和b之间的行(含a和b所在的行)进行替换。其中a和b是之前用m命令所做的标记。 |
2.4. 替换所有行的内容: :%s/from/to/g
命令 |
描述 |
:%s/from/to/g |
对所有行的内容进行替换。 |
2.5. 替换命令的完整形式: :[range]s/from/to/[flags]
- s/from/to/ 把from指定的字符串替换成to指定的字符串,from可以是正则表达式。
2.5.1 [range]表示法
命令 |
描述 |
不写range |
默认为光标所在的行。 |
. |
光标所在的行。 |
1 |
第一行。 |
$ |
最后一行。 |
33 |
第33行。 |
'a |
标记a所在的行(之前要使用ma做过标记)。 |
.+1 |
当前光标所在行的下面一行。 |
$-1 |
倒数第二行。(这里说明我们可以对某一行加减某个数值来取得相对的行)。 |
22,33 |
第22~33行。 |
1,$ |
第1行 到 最后一行。 |
1,. |
第1行 到 当前行。 |
.,$ |
当前行 到 最后一行。 |
'a,'b |
标记a所在的行 到标记b所在的行。 |
% |
所有行(与 1,$ 等价)。 |
?chapter? |
从当前位置向上搜索,找到的第一个chapter所在的行。( 其中chapter可以是任何字符串或者正则表达式。 |
/chapter/ |
从当前位置向下搜索,找到的第一个chapter所在的行。( 其中chapter可以是任何字符串或者正则表达式。 |
注意,上面的所有用于range的表示方法都可以通过 +、- 操作来设置相对偏移量。
2.5.3 [flags]表示法
命令 |
描述 |
无 |
只对指定范围内的第一个匹配项进行替换。 |
g |
对指定范围内的所有匹配项进行替换。 |
c |
在替换前请求用户确认。 |
e |
忽略执行过程中的错误。 |
注意:上面的所有flags都可以组合起来使用,比如 gc 表示对指定范围内的所有匹配项进行替换,并且在每一次替换之前都会请用户确认。
3. Vim介绍与使用
vim是我最喜欢的编辑器,也是linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。而且对于非图形界面vim编辑非常的高效;
3.1 运行vimtutor
- 打开终端输入:vimtutor
这将有vim的详细使用手册;对于新手而言,非常适合学习;(如果你的系统环境不是中文,而你想使用中文的vimtutor,就运行vimtutor zh)
shift +zz,退出vim
3.2 Vim的几种模式
命令 |
描述 |
正常模式 |
可以使用快捷键命令,或按:输入命令行。 |
插入模式 |
可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。 |
可视模式 |
正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。 |
替换模式 |
正常模式下,按R进入。 |
注意任何模式下按ESc都可以进入正常模式;
3.3. 启动Vim
命令 |
描述 |
vim -c cmd file |
在打开文件前,先执行指定的命令; |
vim -r file |
恢复上次异常退出的文件; |
vim -R file |
以只读的方式打开文件,但可以强制保存; |
vim -M file |
以只读的方式打开文件,不可以强制保存; |
vim -y num file |
将编辑窗口的大小设为num行; |
vim + file |
从文件的末尾开始; |
vim +num file |
从第num行开始; |
vim +/string file |
打开file,并将光标停留在第一个找到的string上。 |
vim --remote file: |
用已有的vim进程打开指定的文件。 如果你不想启用多个vim会话,这个很有用。但要注意, 如果你用vim,会寻找名叫VIM的服务器;如果你已经有一个gvim在运行了, 你可以用gvim --remote file在已有的gvim中打开文件。 |
3.4 文档操作
命令 |
描述 |
:e file |
关闭当前编辑的文件,并开启新的文件。 如果对当前文件的修改未保存,vi会警告。 |
:e! file |
放弃对当前文件的修改,编辑新的文件。 |
:e+file |
开始新的文件,并从文件尾开始编辑。 |
:e+n file |
开始新的文件,并从第n行开始编辑。 |
:enew |
编译一个未命名的新文档。(CTRL-W n) |
:e |
重新加载当前文档。 |
:e! |
重新加载当前文档,并丢弃已做的改动。 |
:e#或ctrl+^ |
回到刚才编辑的文件,很实用。 |
:f或ctrl+g |
显示文档名,是否修改,和光标位置。 |
:f filename |
改变编辑的文件名,这时再保存相当于另存为。 |
gf |
打开以光标所在字符串为文件名的文件。 |
:w |
保存修改。 |
:n1,n2w filename |
选择性保存从某n1行到另n2行的内容。 |
:wq |
保存并退出。 |
ZZ |
保存并退出。 |
:x |
保存并退出。 |
:q[uit] |
退出当前窗口。(CTRL-W q或CTRL-W CTRL-Q) |
:saveas newfilename |
另存为 |
- :browse e 会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中,则会打开netrw的文件浏览窗口; 如果是gvim,则会打开一个图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令,如sp等。 用browse打开的起始目录可以由browsedir来设置:
命令 |
描述 |
:set browsedir=last |
用上次访问过的目录(默认); |
:set browsedir=buffer |
用当前文件所在目录; |
:set browsedir=current |
用当前工作目录; |
:Sex |
水平分割一个窗口,浏览文件系统; |
:Vex |
垂直分割一个窗口,浏览文件系统; |
3.5 光标的移动
3.5.1 基本移动
命令 |
描述 |
h或退格 |
左移一个字符; |
l或空格 |
右移一个字符; |
j |
下移一行; |
k |
上移一行; |
gj |
移动到一段内的下一行; |
gk |
移动到一段内的上一行; |
+或Enter |
把光标移至下一行第一个非空白字符。 |
- |
把光标移至上一行第一个非空白字符。 |
w |
前移一个单词,光标停在下一个单词开头; |
W |
移动下一个单词开头,但忽略一些标点; |
e |
前移一个单词,光标停在下一个单词末尾; |
E |
移动到下一个单词末尾,如果词尾有标点,则移动到标点; |
b |
后移一个单词,光标停在上一个单词开头; |
B |
移动到上一个单词开头,忽略一些标点; |
ge |
后移一个单词,光标停在上一个单词末尾; |