Vim / vi 生存指南

22

什么是必要的 vim 命令?新用户需要知道哪些命令以避免出现问题?请每条评论只写一个命令。


1
请重新措辞,要求人们每个答案只发布一个命令,以便可以正确投票。 - SCdF
应该是一个社区维基页面。 - mmcdole
36个回答

14

我认为不可替代的是标记(因为它在vi中也可以使用,而vim的可视模式则不行)。您可以使用m(小写)和您选择的字母(例如x)标记各种位置。然后,您可以移动到其他地方,并使用`x(反引号字母)返回到确切的位置,或者使用'x(撇号字母)转到该行。

这些移动可以用作命令的参数(复制、删除等)。例如,您想要删除10行;而不是计数,然后移动到最顶部的行并输入10dd,您可以进入块的开头或结尾,按下mm(标记m),然后移动到块的另一端,按下d'm(删除撇号m)。如果在此示例中使用反引号而不是撇号,则删除将按字符而不是按行进行。尝试在行中间使用“标记m”进行标记,移动到另一行的中间,然后输入“d反引号m”,您就会明白我的意思。


2
反引号会跳转到书签所在的位置。例如:ma 会将书签放置在光标位置,``a` 则会滚动到该书签处。 - Yktula
4
你说“番茄”,我说“反引号” :) - tzot

8

当我学会使用*或#进行搜索时,我感到非常高兴。它们分别可以向下或向上搜索光标下的单词。在使用之前,请确保先执行:set incsearch:set hlsearch命令。



5

当您需要执行一些重复的操作时,宏通常比正则表达式更快。只需键入

q[0-9a-z] in normal mode

许多人使用
qq

因为它很快。 在正常模式下按下 q 键 再次停止录制。 然后只需键入即可。

@[0-9a-z] in normal mode

重复您刚刚录制的内容。

@q

对于上面的示例,您还可以重复使用宏。假设您编写了一个宏,用于跳到一行的开头,插入制表符,然后向下移动一行。然后,您可以通过键入“@q”来运行宏以进行测试。然后,您可以通过键入“9@q”来重复该操作九次。


4
:q -> quit
:w -> save
:q! -> quit and don't save
:x -> save and quit
:[number] -> go to line number
G -> go to end of file
dd -> delete line
p -> "put" line
yy -> "copy" line
:s/[searchfor] -> search

我猜这些是开始学习的基础。

4
使用“J”(大写字母J表示连接)命令删除行末的换行符,否则可能会很棘手。

4

3

虽然这是个人偏好的问题,但我发现其中一个必要的事情是将Esc键重新映射为其他键。

我发现按下Esc键退出插入模式非常不舒服,但Vim的美妙之处在于它允许按键映射。

我目前使用以下映射,使用Control + S

inoremap <C-s> <Esc>:w<CR>

这有一个优点,就是它是我已经记住的关键映射,并且每次进入正常模式时都可以自动保存我的工作。是的,我知道这很疯狂,但我无论如何都会频繁地使用保存命令。就像一个坏习惯,你懂的。


1
如果你没有使用美国标准键盘布局(就像我一样),那么按下ctrl-[比按下Esc键更难。但是,这个想法是你不必受限于Esc键,正如许多非Vim用户所认为的那样。感谢您的评论。 - Sergio Acosta

3

首先,您需要知道如何关闭vi:

按下ctrl-c,输入:q!

其他内容可以在vimtutor中找到。通过在命令行中键入vimtutor启动vimtutor。


按下 Control-C,然后输入 :q!?为什么要用 Control-C?为什么不直接使用 ESC 键? - tzot

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接