概述
在 Linux 下面编辑器离不开 vim(vi),vim 的确比较强大,使用的越多越感觉有些时候一点都不比 windows 中的 word 慢,不过她的学习曲线也比较长。
vim 配置
Linux 配置文件一般是位于 /etc/vimrc 或者 /etc/.vimrc
个人常用配置如下:
"vim的 set autoindent 和 set paste (避免出现注释无法粘贴问题)不能同时出现;
set nocp "关闭vi模式
filetype indent on "不同文件类型采用不同缩进
set autoread "当文件被外部改变时自动读取
set mouse=a "允许使用鼠标点击定位
set cursorline "高亮光标所在行
set selection=exclusive "允许区域选择
set selectmode=mouse,key
set ruler "标尺功能,显示当前光标所在行列号
syntax on "语法高亮,或者set syntax=on
set nu "显示行号
set nowrap "取消自动折行
set textwidth=1000 "把textwidth调大,间接取消自动折行
#缩进
set shiftwidth? "查看缩进值
set tabstop=4 "tab键相当于4个空格键
set expandtab "编写Makefile 时候记得要取消。
set shiftwidth=4 "设置缩进值为4
set ignorecase "搜索忽略大小写,非常有用。简写模式 set ic
set hlsearch "搜索逐字符高亮
set autoindent "自动缩进
常用操作
缩进查看
:set shiftwidth? 查看缩进值
拷贝粘贴模式
有些时候,想从一个文件拷贝多行内容到另外一个文件,此时若碰到代码里面有类似 # //
注释的情况,发现文件排版全都错位了,排版很烂,必须要手动调整,此时就可以使用下面的两个命令,很是方便。
:set copyindent #即使打开了 set nu 模式,也不会把行号拷贝过去的。
:set paste #然后选择输入模式(i、I、a、A、o、O)就可以直接粘贴
移动光标
很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来做:
<start position><command><end position>
举例子:
你可可以输入 ye
,从当前位置拷贝到本单词的最后一个字符。
你也可以输入 y2/foo
来拷贝2个 “foo” 之间的字符串。
当前行上移动光标常用命令如下:
0 # 到行头
^ # 到本行的第一个非blank字符
$ # 到行尾
g_ # 到本行最后一个不是blank字符的位置。
fa # 到下一个为a的字符处,你也可以fs到下一个为s的字符。
t, # 到逗号前的第一个字符。逗号可以变成其它字符。
3fa # 在当前行查找第三个出现的a。
F 和 T # 和 f 和 t 一样,只不过是相反方向。
自动补齐
在 Insert 模式下,你可以输入一个词的开头,然后按 <C-p>
或是<C-n>
,自动补齐。
区域选择
在visual 模式下,有些命令很强大,其命令格式为
<action>a<object> 或 <action>i<object>
其中:
action
可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)object
可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]
假设你有一个字符串 (map (+) (“foo”)).而光标键在第一个 o 的位置。
vi" # 会选择 foo.
va" # 会选择 "foo".
vi) # 会选择 "foo".
va) # 会选择("foo").
v2i) # 会选择 map (+) ("foo")
v2a) # 会选择 (map (+) ("foo"))
列操作
Ctrl + V 可以进入【可视模式】
- 批量在行首添加字符:
Ctrl + V #进入可视模式;
jjjj #选择多(4)行,G 可直接到文本末尾;
I #这里是大写的i,进入编辑模式
Esc #按下**两次**Esc,后即可;
- 批量在行尾添加字符:
Ctrl + V #进入可视模式;
jjjj #选择多(4)行,G 可直接到文本末尾;
$ #移动到文本末尾一行
A #这里是大写的a,进入编辑模式
Esc #按下**两次**Esc,后即可;
分割窗口
使用 :split
上下分割窗口(:vsplit
创建垂直分屏)
窗口操作
对于已打开的窗口,用以下几种方法改变分割窗口的大小
扩大窗口:
Ctrl-W +
缩小窗口:
Ctrl-W -
这两个命令接受计数前缀用于指定扩大和缩小的行数,如
"4 Ctrl-W +"会使窗口增高4行。
指定窗口高度:
{height}Ctrl-W _
将窗品护展到尽可能大:
Ctrl-W _
Mark 标记
可以使用任一字母(a-zA-Z)去命名一个标记,意味着一个文件里最多可以有52个命名标记。常用如下:
m <a-z> # 创建标记
' <a-z> # 移动到标记的文本行首
` <a-z> # 移动到标记的光标位置
:marks <a-z> # 列示所有标记
:delmarks <a-z> # 删除指定标记
:delmarks! # 删除所有标记
利用 :marks
命令,可以列出所有标记。这其中也包括一些系统内置的特殊标记(Special marks):
. # 最近编辑的位置
0-9 # 最近使用的文件
∧ # 最近插入的位置
' #上一次跳转前的位置
" #上一次退出文件时的位置
[ #上一次修改的开始处
] #上一次修改的结尾处
批量文本替换
: s/sourceStr/targetStr/g # 整行替换
:% s/sourceStr/targetStr/g # 替换个文件
快速选中并复制粘贴替换一个单词
1.光标移动到 this 的开头,按 v 按e 按y
2.光标移动到 where 的开头,按 v 按e 按p
也就说,快速选中一个单词,按v按e即可。
替换模式
另外还在普通模式下,通过键入 r、R 进入 替换模式 ,其中 r 表示只替换一个字符,大写 R 则表示一直替换直到 按下<Esc>
结束。
跨文件复制
跨文件复制需要借用 寄存器。
寄存器起始符号是 "
(双引号,Enter键左边),一般用从 a 到 z 这26个字母作为寄存器的名字。举例子如下:
"lyy # 复制一行放入到 s 寄存器
"lp # 把寄存器 l 中内容粘贴出来
任意内容复制,可以结合 visual 模式(普通模式下按键 v 进入),先选中所需的文本,然后使用 “ly
把选中的内容复制到 寄存器 l (小写l ,常用来表示 line)
录制宏
借用寄存器录制宏可以实现快速的同一动作的重复操作,类似于 word 文档中的 F4 按钮,把枯燥修改为 便捷。
分为下面三个步骤:
- 使用 q{register} 命令开始,后续的动作将被记录到名为 {register}
的寄存器中。给出的寄存器名字必需是a到z之间的一个字母。 - 执行你要执行的操作。
- 按下 q 以结束对命令的记录(注意:仅 q 一个字符, 不要键入多余的字符)。
现在你可以通过 @{register} 命令来执行刚刚记录下来的记录宏了。