22

什么是基本的 vim 命令?新用户需要知道什么才能避免陷入麻烦?请每条评论一条命令。

4

36 回答 36

14

我发现不可替代的(因为它也可以在 vi 中工作,与 vim 的可视模式不同)是标记。m您可以用(小写)和您选择的字母(例如 x)标记各个点。然后你去别的地方,可以用 ``x (backquote letter) to the exact spot, or with'x` (撇号字母)返回到该行。

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

于 2008-09-16T08:44:02.180 回答
8

当我学会使用 * 或 # 分别向下或向上搜索光标下的单词的那一天,我感到非常高兴。确保:set incsearch:set hlsearch首先。

于 2008-09-16T12:49:40.687 回答
6

我喜欢这个二维码!

http://www.fsckin.com/wp-content/uploads/2007/10/vi-vim_cheat_sheet.gif

于 2008-09-16T08:27:17.400 回答
5

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

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

很多人用

qq

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

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

重复刚才录制的内容。

@q

对于上面的例子。

编辑添加:您还可以重复宏。假设您编写了一个宏来跳转到行首,插入一个制表符,然后跳下一行。然后,您可以通过键入“@q”来测试您的宏以运行一次。然后,您可以通过键入“9@q”再重复该操作九次。

于 2008-09-16T08:19:00.400 回答
4

使用“J”(J 表示加入;大写)命令删除行尾的换行符。否则你会发现它很棘手。

于 2008-09-16T07:13:38.793 回答
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

我想这些是基本的开始

于 2008-09-16T06:53:50.900 回答
4

IBM 最近的这个Vim 教程非常好

于 2008-09-16T08:36:01.840 回答
3

首先你需要知道如何关闭vi: ctrl-c :q!

其余的可以从 vimtutor 中找到。通过在命令行输入 vimtutor 来启动 vimtutor

于 2008-09-16T06:46:39.840 回答
3

尽管这是个人喜好问题,但我发现要做的重要事情之一就是重新映射Esc到其他东西。

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

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

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

这具有作为我已经提交到内存的键映射的优点,并且每次进入正常模式时都具有保存我的工作的附加价值。是的,我知道这很疯狂,但无论如何我都会经常点击保存命令。这就像一个坏习惯,你知道的。

于 2008-11-12T11:03:24.577 回答
2

请参阅http://www.rayninfo.co.uk/vimtips.html以获取大量 Vim 技巧的集合,从基本的无法生存到您可能从未想过尝试的非常复杂的东西。

于 2008-09-16T13:55:32.883 回答
2
" ~/.vimrc
" Turn on line numbering
set nu
" Turn on syntax highlighting
syntax on    
" Set 4 space expanding tabs
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
"turn off line wrapping
set nowrap
" Map CTRL-N to create a new tab
:map <C-n> <ESC>:tabnew<RETURN>
" Map Tab and CTRL-Tab to move between tabs
:map <Tab> <ESC>:tabn<RETURN>
:map <C-Tab> <ESC>:tabp<RETURN>
于 2008-09-16T08:52:53.827 回答
2

如果您使用 vim,“u”命令(在命令模式下)将撤消您输入的最后一个命令。您可以重复使用此命令来撤消您在保存文件之前可能犯的错误。

于 2008-09-16T13:03:47.813 回答
2

Vim Tips Wiki中列出了许多很棒的命令。

于 2008-11-12T11:49:30.867 回答
1
:%!xxd

以十六进制查看缓冲区的内容。要还原:

:%!xxd -r 
于 2009-05-07T13:00:36.177 回答
1

别名 vi 编辑 :)

抛开所有的幽默.. 对于 vi 不使用 nedit..

  • i(切换到插入模式)
  • a(追加 = 移动到行尾并切换到插入模式)
  • esc(退出插入模式)
  • dd删除一行
  • x删除一个字符
  • :wq(保存并退出)
  • /开始搜索
  • n找下一个
  • ?向后搜索..
  • yy(yank) 复制一行到缓冲区
  • pp(粘贴)粘贴到这里
  • r(替换一个字符)
  • <N> <command>这是一个简洁但令人讨厌的功能,可让您输入数字,然后输入命令
  • 5dd将删除 5 行

但在这一点上,你不妨 -man vi并刷新你的记忆

虽然还有很多,但几年前我从 Vi 切换到了 nedit,我发现它具有更多我可以更轻松地定期使用的功能。选项卡式编辑、增量搜索栏、列选择、复制和粘贴。对选定的行进行排序,在选择、整个文档或所有打开的文档中进行搜索和销毁.. 撕下下拉菜单.. 它支持我使用的所有语言的语法突出显示.. (我使用了很长时间的模式文件多年来,VIM 现在很多都是等效的,但是它必须引入 Nedit 没有的功能,以及在我再次切换之前迁移我的模式文件的简单方法。

于 2008-09-16T08:22:49.063 回答
1

学习这些命令的时候运行vimtutor也不错

于 2008-09-16T08:23:44.770 回答
1

我用vi很轻,只用了以下命令:

a   - switch to insert mode (after the cursor)
esc - return to command mode
:wq - save and quit
:q  - quit (no save, only without modification)
:q! - force quit (no save, also with modification)
x   - delete one character (in command mode)
dd  - delete the whole line (in command mode)

我知道还有很多,但这些足以让你度过难关。

于 2008-09-16T06:48:08.480 回答
1

我最大的提示:ctrl+qctrl保存您不小心点击+s保存您正在处理的文件的那一天

于 2008-09-16T08:30:24.617 回答
1

我喜欢 Bram Moolenaar 和 Oleg Raisky 的Vim 5.6 参考指南
你可以直接打印成小册子的形式,方便阅读,我一直在身边。
它有点老了,但是 Vi 的 8 年寿命是多少?

于 2008-11-12T11:25:39.930 回答
1
:set ignorecase smartcase

使搜索不区分大小写,除非您的搜索包含大写字母。也许不是不可或缺的,但我发现自己在任何时候在新地方编辑时都会设置这个选项。它在我拥有的任何 vimrc 文件中。

于 2009-02-12T05:53:15.340 回答
1

我的 vimrc 里有这个

set number
set relativenumber

这给了我一个行编号系统,它使j,k键真正富有成效。

于 2015-12-07T08:54:57.827 回答
0

:g/<pattern>/t$

将复制<pattern>到文件的末尾。当您想提取线条但不想一一提取时很有用。

于 2012-10-23T04:50:07.523 回答
0

几个月前,我从 Textmate 切换到了 VIM,并写了一篇关于如何在 VIM 中执行 110 个 Textmate 编辑命令的指南。它按类别组织,例如管理文件、自动完成单词和语法突出显示。

文本伴侣到 VIM

于 2011-09-07T17:19:50.243 回答
0

正如其他几个人已经提到的那样,vimtutor 是要走的路。它会教你在 vim 中需要知道的一切。我会给你的一条一般建议是尽可能远离插入模式。其他模式也有很大的威力,只需要一点点练习就可以适应。

于 2008-09-16T07:00:54.487 回答
0

My favorites:

%  find matching bracket/brace 
* and #  next/previous match
gg top of page
G end of the page
<Ctrl-v> Change to visual mode and select column
<Ctrl-a> increase current number by 1
<Ctrl-x> decrease current number by 1
Running macros
于 2009-05-07T13:11:39.270 回答
0

将文件中的“foo”替换为“bar”:%s/foo/bar/gc

于 2008-09-16T08:41:36.820 回答
0

我最喜欢的命令之一是 %G,它直接到文件末尾。在日志文件中特别有用。

于 2008-09-16T06:46:42.120 回答
0

如何在模式之间切换(i 进入插入模式(多种方式之一),esc 退出插入模式,冒号表示命令模式)以及如何保存和退出。(:wq)

于 2008-09-16T06:47:54.690 回答
0

另一个有用的命令是搜索某些东西: / 例如 /Mon 将搜索(并且在 vim 高亮的情况下)您文件中出现的任何 Mon。

于 2008-09-16T06:48:11.210 回答
0

i - 插入模式(转义退出) dd - 删除行 shift-y - 'Yank'(复制) line p - 'Put'(粘贴) line(s) shift-v - 用于选择文本的可视模式(tryin 'yanking ' 此文本并将其“放在”某处。 ctrl-w n - 创建新窗口(您可以在此处打开文件或启动新文件) ctrl-w v - 垂直拆分现有窗口 ctrl-n(在插入模式下) - 自动完成(如果支持) :! 运行 shell 命令,通常使用标准 in 作为文件或选择 (shift-V)

有用的插件查看: * 缓冲区资源管理器 - 使用 \be 查看缓冲区中的文件(并选择重新打开)

于 2008-09-16T08:24:44.253 回答
0

注意 vi 不是 vim!vim 正在迅速变成新世纪的 emacs。nvi 可能是最接近原始 vi 的东西。这是一个很好的提示:“xp”将交换两个字符(试试看)。

于 2008-09-16T08:34:15.387 回答
0

真正的力量在于寻找。以下是基本命令:

/Steve 将在文本中找到“Steve”的第一个实例。n 将在文本中找到下一个“Steve”。:%s//Stephen/g 会将您刚刚搜索的所有“Steve”实例替换为“Stephen”。

不是为了推销自己,而是我写了一篇关于这个主题的博客文章。它侧重于初学者的 Vim 的关键部分。

于 2009-02-12T06:02:50.260 回答
0

没有人提到旺盛的ctags?谷歌并安装它;比您可能拥有的默认 ctags 好得多。要使用它,请 cd 到您的项目根目录并输入

:!ctags -R 。

在名为 tags 的文件中构建项目中所有内容的数据库...java、c++、python、ruby、javascript,任何东西。

:help ctags 用于使用生成的标签的大量命令,无法概括。将光标放在函数名上,键入 CMD ],打开定义它的文件。更多类似的命令。很快就变成了第二天性……几乎和 IDE 一样好(而且 VIM 永远不会像 eclipse 经常做的那样让你失望。

于 2009-05-08T02:04:30.533 回答
0

我使用此处的教程迈出了第一步,并且已经使用参考备忘单几个星期了。而且,当然,在 vim/gvim/Macvim 中有 vimtutor。

于 2011-01-18T16:33:48.513 回答
0

有时最好重新格式化缓冲区(即重新制表、对齐大括号等)。我最近学到了一个节省时间的方法:

gg=G

例如...它将变成以下内容:

if ( !flag )
{
  // Do something special
  }
else
   {
 // Do another special thing
}

进入以下:

if ( !flag ) 
{
    // Do something special 
}
else
{
    // Do another special thing
}

或者,如果你有一个 xml 文件,你希望重新缩进,因为格式很乱,你可以运行上面的命令并打开如下所示的内容:

<root>
<addressBook>
    <contact first="Frank" last="Tank"/>
        <contact first="Foo" last="Man"/>
    </addressBook>
</root>

变成更易读的东西,如下所示:

<root>
    <addressBook>
        <contact first="Frank" last="Tank"/>
        <contact first="Foo" last="Man"/>
    </addressBook>
</root>
于 2011-01-18T19:47:22.607 回答
0

请参阅此站点以获取学习基本运动命令的有趣方式:http: //kikuchiyo.org。我认为线程中涵盖了大多数基本命令,但我总是喜欢向 vim 的新手推荐这个。单击 train first 链接,其中包含基本移动命令的图例和i拾取红宝石的插入命令。快速移动的好习惯。

于 2012-01-28T17:37:38.550 回答