Vim 配置和常用操作(移动光标、自动补齐、列操作、分屏、Mark 标记、批量替换、跨文件复制、录制宏)

概述

在 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 按钮,把枯燥修改为 便捷。
分为下面三个步骤:

  1. 使用 q{register} 命令开始,后续的动作将被记录到名为 {register}
    的寄存器中。给出的寄存器名字必需是a到z之间的一个字母。
  2. 执行你要执行的操作。
  3. 按下 q 以结束对命令的记录(注意:仅 q 一个字符, 不要键入多余的字符)。

现在你可以通过 @{register} 命令来执行刚刚记录下来的记录宏了。

参考

主流文本编辑器学习曲线
简明 VIM 练级攻略

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值