【问题标题】:Vim / vi Survival GuideVim / vi 生存指南
【发布时间】:2010-09-09 08:25:50
【问题描述】:

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

【问题讨论】:

  • 请重新措辞,要求人们在每个答案中只发布 一个 命令,以便正确投票。
  • 那么应该是一个社区维基。

标签: vim vi


【解决方案1】:

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

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

【讨论】:

  • Control-C,然后是:q!?为什么选择 Control-C?为什么不是普通的 ESC?
【解决方案2】:

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

【讨论】:

  • 其实你可以去掉'%',直接输入'G'。 '%' 没有意义。
  • % 并非没有意义,因为它会将您带到匹配的括号。如果您不在括号内(方括号、大括号或圆括号),那么它就是空操作。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    我用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)
    

    我知道还有很多,但这些已经足够让你度过难关了。

    【讨论】:

    • 如果你只使用这些,那么基于 scintilla 的编辑器(例如 notepad++)会好得多。
    【解决方案5】:

    另一个有用的命令是搜索:/ 例如/Mon 将搜索(在 vim 突出显示的情况下)您文件中出现的任何 Mon。

    【讨论】:

      【解决方案6】:
      :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
      

      我想这些是基本的开始

      【讨论】:

        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          【讨论】:

            【解决方案9】:

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

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

            很多人使用

            qq
            

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

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

            重复刚才录制的内容。

            @q
            

            上面的例子。

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

            【讨论】:

              【解决方案10】:

              别名 vi nedit :)

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

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

              但此时你不妨 - man vi 刷新你的记忆

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

              【讨论】:

                【解决方案11】:

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

                【讨论】:

                  【解决方案12】:

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

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

                  【讨论】:

                    【解决方案13】:
                    【解决方案14】:

                    我最大的建议:ctrl+q 可以避免您不小心按到 ctrl+ s 保存您正在处理的文件

                    【讨论】:

                      【解决方案15】:

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

                      【讨论】:

                      • "vim 正在迅速变成新世纪的 emacs。"老实说,我不确定如何解释这一点。
                      【解决方案16】:

                      【讨论】:

                        【解决方案17】:

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

                        【讨论】:

                          【解决方案18】:

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

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

                          【讨论】:

                          • 反引号指向书签所在的位置。像这样:ma 在光标位置添加书签,使用 ``a` 滚动到它。
                          • 你说to-ma-to,我说反引号。 :)
                          【解决方案19】:
                          " ~/.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>
                          

                          【讨论】:

                            【解决方案20】:

                            当我了解到使用 * 或 # 分别向下或向上搜索光标下的单词的那一天,我感到非常高兴。请务必先:set incsearch:set hlsearch

                            【讨论】:

                              【解决方案21】:

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

                              【讨论】:

                                【解决方案22】:

                                请参阅http://www.rayninfo.co.uk/vimtips.html,了解大量 Vim 技巧,从基本的“离不开”到非常复杂的东西,您可能从未想过尝试。

                                【讨论】:

                                  【解决方案23】:

                                  虽然这是个人喜好问题,但我发现其中一项重要工作是将 Esc 重新映射到其他内容。

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

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

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

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

                                  【讨论】:

                                  • 如果您不使用美国标准键盘布局(我的情况), ctrl-[ 比 Esc 更难命中。但这个想法是,您并不像许多非 Vim 用户所想的那样仅限于 Esc。感谢您的评论。
                                  【解决方案24】:

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

                                  【讨论】:

                                  • 还有什么软件比 vim 更能经受住时间的考验?
                                  【解决方案25】:

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

                                  【讨论】:

                                    【解决方案26】:
                                    :set ignorecase smartcase
                                    

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

                                    【讨论】:

                                      【解决方案27】:

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

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

                                      不是为了推销自己,但我写了一篇关于这个主题的blog 帖子。它侧重于初学者的 Vim 的关键部分。

                                      【讨论】:

                                        【解决方案28】:
                                        :%!xxd
                                        

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

                                        :%!xxd -r 
                                        

                                        【讨论】:

                                          【解决方案29】:

                                          我的最爱:

                                          %  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
                                          

                                          【讨论】:

                                            【解决方案30】:

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

                                            :!ctags -R .

                                            在一个名为 tags 的文件中构建一个包含项目中所有内容的数据库...java、c++、python、ruby、javascript 等等。

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

                                            【讨论】:

                                              猜你喜欢
                                              • 1970-01-01
                                              • 2011-06-09
                                              • 2020-12-16
                                              • 2019-05-23
                                              • 2014-03-06
                                              • 2013-03-09
                                              • 1970-01-01
                                              • 1970-01-01
                                              • 1970-01-01
                                              相关资源
                                              最近更新 更多