快捷搜索:  汽车  科技

vim自学入门(初学者需要了解的Vim)

vim自学入门(初学者需要了解的Vim)@:":是存储最近一次执行的命令的寄存器。可以通过":p将其打印到缓冲区。约定 <c-x>表示按下Ctrl x。约定如果你需要: h一个特定的字符串来获取帮助,例如 :h p,关键字符串我们用括号括起来中h{p}。":

虫虫一直是终端命令行的拥趸,一直倡导用linux,倡导使用非GUI界面实现日常的工作。使用命令行工作最重要的是有一个称手的编辑器,对于入门者来说最好的就是Vim了。但是Vim命令繁多,对初学者很不友好,试想要一下子记住光是普通模式的100多种模式可能绝大数的老司机都够呛,更不要说初学者了。但是虫虫要说Vim最神奇和有生机的地方不是那许许多多的完全的命令,而是一个个小技巧,很有用也很精巧,就想饭后小甜点,可能没它你也能干好活,但是有了它,绝对让你的生活精致不少。今天虫虫就跟大家一起来分享Vim中的这些小技巧。

概述

本文中我们所有例子和技巧都是基于最原始自带的功能。

我们首先约定<CR>表示按下回车键。比如"=strftime("%c")<cr>p表示:

先输入"=,出现输入栏,入strftime("%c"),回车,最后输入p

约定 <c-x>表示按下Ctrl x。

约定如果你需要: h一个特定的字符串来获取帮助,例如 :h p,关键字符串我们用括号括起来中h{p}。

基本命令

":

":是存储最近一次执行的命令的寄存器。可以通过":p将其打印到缓冲区。

@:

mA 'A

m{字符}表示在光标处设置标记。然后'{字符}表示跳转到该行。如果用小写字母,这是每个缓冲区,因此可以使用它进行导航。如果用的是大写字母,它是全局的,可以在文件间跳转:如果你不在带有A标记的文件中,'A将跳转到该文件的改行。可以使用:marks查看所有设置标记。

vim自学入门(初学者需要了解的Vim)(1)

ctrl-A n和ctrl-X n

跳转到下面第数字n设定的行。比如现在为第5行,crtl-A/X 10会跳转到第15行。

q:

打开以前命令的历史记录。然后可以像处理文本方式处理就这些操作记录。可以可以使用<CR>回车直接运行修改后的命令。该命令非常便捷有用,可以让我们迅速修改和执行已经执行过的操作。

q/ q?

和q:相同,但是支持搜索

ctrl-I,ctrl-O

跳转操作后,返回到上一个跳转位置或者跳转的下一个位置,用于在跳转位置间快速跳转。试想一下电视遥控器上返回,跳转频道后,返回会返回上一个频道。

可视模式

GV

选择以前的视觉效果。

V_O

转到视觉块的另一端。如在块模式下,它会转到相对的对角线:使用v_O转到相对的水平角。

g ctrl-A/ctrl-X

在可视模式下,ctrl-A只会增加每一行的第一个数字。而g ctrl-A将使每个匹配线的增量减1。使用表格更容易解释:

vim自学入门(初学者需要了解的Vim)(2)

运算符:v,V,c-v(:h o_v)

视觉模式下:v是字符方式,V是行方式,ctrl-V是块方式。但这三个操作符也可以用做计算。比如,现在模式:

vim自学入门(初学者需要了解的Vim)(3)

如果将光标放在顶部b并按d2j,会将删除所有三行。因为j一个线性运算。如果你操作为,按下d<c-V>2j,它会将执行运算并删除的ac中间的b列,结果如下:

vim自学入门(初学者需要了解的Vim)(4)

通常使用这种方法的一种方法是删除搜索。通常d/是排除式操作。可以使用dV/来在行模式下删除搜索包含的行。还有另一种方法可以做到:

/RE/n

跳转转到匹配下方的第n行,如果n为负,则转到上方。它可以支持行模式的跳转。如果要删除匹配正则表达式的第一行并包含该行,可以执行d/RE//0。

Ex命令

Ex命令是从命令模式输入要执行的内容,例如:s做替换。除了替换外,Ex模式还有很多技巧可供使用,ex模式都必须要自定执行行范围,比如%表示所有行,1 2表示第一行和第二行。

:g/RE/ex

表示在正则表达式匹配的行上运行Ex命令。比如,可以使用g/^$/d删除所有匹配^$的行,即所有空行。v命令和g相反,表示在所有与正则表达式不匹配的行上执行ex。

:norm {Vim}

和范围符号一样运行{Vim}。例如,g/RE/norm f dw将删除匹配正则表达式的每一行上第一个空格后的第一个单词。和宏起到同样效果,但是要方便的多。

norm操作符遵循搜有的映射设置。比如,如果在插入模式下将jk映射到<esc>,则norm I jk$diw将在行的开头添加一个空格,保留插入模式,然后删除该行的最后一个单词。这个功能非常棒,但是你也可以禁止用它,方法是用norm!将会禁用映射设置。

:co .

将范围复制到当前行。也可以使用任意点 比如 3或'a.mv改为移动。

:y {reg}

将范围复制到寄存器{reg}。如果{reg}是大写,则会附加到已有的寄存器。即如果我们这样做

let @a = '' | %g/regex/y A

vim自学入门(初学者需要了解的Vim)(5)

它会将整个文件中与正则表达式匹配的所有行复制到a.这可以帮助我们从文件中提取分解的文本并将其复制到系统剪贴板(let @ = @a.)

:windo {ex}

在所有窗口上运行。:windo $将所有窗口滚动到底部。还有bufdo,cdo,tabdo等。这在g操做和s替换时候非常有用,比如想用BB替换每个AA实例但想先检查一下各个替换,可以使用vimgrep AA将所有匹配加载到quickfix中,然后使用cdo s/AA/BB/cge来查找/替换所有匹配。

set命令

大多数set命令都不能算是Vim技巧,下面我们列一些有用的

set lazyredraw

不要在宏的中间重绘屏幕。使它们更快完成。

set smartcase/ignorecase

如果两者都打开,则没有大写字母的搜索不区分大小写,而使用大写字符的搜索区分大小写。

set undofile

持续性的撤消,设置关闭并重新打开Vim。与undotree等插件使用效果非常好。

set foldcolumn={n}

使侧边栏中的折叠可见。 n越大,视觉上表示的折叠越多,数字表示的越少。

set suffixesadd={str}

gf通常是光标下的goto文件,也支持有要该字符串中带文件后缀。 suffixesadd还会检查具有该后缀的文件。如果你有suffixesadd = .md,那么会对字符串"foo"按gf将查找文件foo和foo.md.

set inccommand=nosplit

使用是Neovim时,inccommand户会实时显示ex命令会做出哪些更改。目前支持s操作,但即使这样也非常有用。如果输入:s/regex,它会高亮显示匹配正则表达式的内容。如果随后添加/和更改的内容,它会显示所有匹配替换为需要更改的内容。

set statusline (:h statusline)

指定每个窗口底部栏中显示的内容。这里的格式比较复杂,容易错。一般来说,我们可以在默认设置基础上做写设置,Vim默认设置是:

vim自学入门(初学者需要了解的Vim)(6)

这里最简单的替换是%P,它显示所在文件的百分比。状态行格式在写入exp()的结果时读取%{exp()}。因此,对于markdown文件,我们设置:

vim自学入门(初学者需要了解的Vim)(7)

用文档数来替换掉百分比%P。

有用的插件Undotree

大多数文本编辑器都有线性撤消。如果进行更改A,撤消它,然后进行更改B,那么A将永远丢失。Vim存储整个撤消树。你只撤消当前分支中的先前状态。 g-移动到之前的时间版代码。可以使用:undolist查看撤消列表。

Vim这种机制有点怪,那么这儿推荐一个插件Undotree:它可以让你弹出一个很好的ascii表示撤消树,以便于导航。

vim.swap

能为我们提供交换参数的命令,通过它我们可以在通过敲记下键盘就实现(a f(b c))替换为(f(b c) a)。对与常编辑数学公式的人人,这非常有用。

Neoterm

在neo/vim嵌入式终端周围放置更高级别的API。比如,:T {text}会将{text}发送到终端。做出很好的REPL。

Neovim API

Neovim有一个广泛的API用于将Vim与外部程序组合在一起。因此,用它我们可以使用Python脚本向Neovim实例发送命令,或通过服务器控制它。文档和实例详见官方仓库文档和Wiki

vim自学入门(初学者需要了解的Vim)(8)

更多有用的插件不在做举例,可以去github上搜索下

猜您喜欢: