Vim / vi生存指南

时间:2008-09-16 06:42:56

标签: vim vi

什么是必不可少的vim命令?新用户需要知道什么才能避免陷入麻烦?请注意每个评论一个命令。

37 个答案:

答案 0 :(得分:27)

多年来我和{{}}一直保持着Vi Reference Card。这非常有用。

答案 1 :(得分: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”,你会看到我的意思。

答案 2 :(得分:8)

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

答案 3 :(得分:6)

答案 4 :(得分:5)

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

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

很多人使用

qq

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

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

重复刚刚录制的内容。

@q

如上所示。

编辑添加:你也可以重复宏。假设您编写了一个宏来跳转到一条线的头部,插入一个标签,然后向下跳一行。然后,通过键入“@q”来运行它一次测试您的宏。然后,您可以通过键入“9 @ q”重复该动作九次。

答案 5 :(得分: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

我想这些是从

开始的基本要素

答案 6 :(得分:4)

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

答案 7 :(得分:4)

答案 8 :(得分:3)

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

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

我目前正在使用Control + S

使用以下映射
inoremap <C-s> <Esc>:w<CR>

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

答案 9 :(得分:3)

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

休息可以从vimtutor找到。通过在命令行键入vimtutor启动vimtutor

答案 10 :(得分:2)

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

答案 11 :(得分:2)

请参阅http://www.rayninfo.co.uk/vimtips.html以获取大量的Vim提示,从基本的不能生活到没有非常复杂的内容,您可能从未想过尝试过。

答案 12 :(得分:2)

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

答案 13 :(得分: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>

答案 14 :(得分:1)

我喜欢Bram Moolenaar和Oleg Raisky的Vim 5.6 Reference Guide 您可以直接以小册子形式打印,易于阅读,我总是把它放在一边    这有点古老了,但Vi的生命周期是8年?

答案 15 :(得分:1)

我在我的vimrc中有这个

set number
set relativenumber

这给了我一个行编号系统,它使 j k 键非常高效。

答案 16 :(得分:1)

:set ignorecase smartcase

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

答案 17 :(得分:1)

:%!xxd

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

:%!xxd -r 

答案 18 :(得分:1)

我最大的提示: ctrl + q 保存你不小心碰到 ctrl + 的那一天s 保存您正在处理的文件

答案 19 :(得分:1)

在学习这些命令时运行vimtutor也很不错

答案 20 :(得分:1)

alias vi nedit:)

除了幽默之外...... 为vi什么时候不使用nedit ..

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

但此时你也可以    - man vi并刷新你的记忆

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

答案 21 :(得分:0)

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

/史蒂夫将在文中找到“史蒂夫”的第一个例子。 你会在文中找到下一个“史蒂夫”。 :%s // Stephen / g将替换你刚用“Stephen”搜索的所有“Steve”实例。

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

答案 22 :(得分:0)

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

答案 23 :(得分:0)

:g/<pattern>/t$

会将<pattern>复制到文件末尾。当你想要提取线但不想逐一进行时很有用。

答案 24 :(得分:0)

请参阅此网站,了解有关学习基本动作命令的有趣方法:http://kikuchiyo.org。我认为线程中涵盖了大多数基本命令,但我总是喜欢为新手提出建议。单击列车第一个链接,其中包含基本移动命令的图例,以及用于拾取红宝石的插入命令i。快速移动的好习惯。

答案 25 :(得分:0)

几个月前我从Textmate切换到VIM,写了一篇关于如何在VIM中编写110 Textmate编辑命令的指南。它分为几类,例如管理文件,自动完成单词和语法高亮。

Textmate to VIM

答案 26 :(得分: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>

答案 27 :(得分:0)

我使用The tutorial here完成了我的第一步,并使用了参考备忘单几周。当然,还有vim / gvim / Macvim中的vimtutor。

答案 28 :(得分:0)

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

:!ctags -R。

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

:使用生成的标签帮助ctags执行许多命令,这些命令太多无法概括。 将光标放在函数名称上,键入CMD],打开定义它的文件。还有更多这样的命令。很快就变成了第二天性......几乎和IDE一样好(VIM从来没有像往常那样让你失望。

答案 29 :(得分:0)

我的最爱:

%  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 :(得分:0)

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

答案 31 :(得分:0)

将“foo”替换为文件中的“bar” :%S /富/酒吧/ GC

答案 32 :(得分:0)

我非常轻松地使用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)

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

答案 33 :(得分:0)

另一个有用的命令是搜索一些东西:/ 例如/ Mon将搜索(如果是vim高亮显示)文件中出现Mon的任何内容。

答案 34 :(得分:0)

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

答案 35 :(得分:0)

i - 插入模式(退出退出) dd - 删除行 shift-y - 'Yank'(复制)行 p - '放'(粘贴)线 shift-v - 用于选择文本的可视模式(尝试'yanking'这个文本并'把'放在某个地方。 ctrl-w n - 创建新窗口(您可以在这里打开文件或启动新文件) ctrl-w v - 垂直拆分现有窗口 ctrl-n(在插入模式下) - 自动完成(如果支持) !运行shell命令,通常使用标准输入作为文件或选择(shift-V)

要查看的有用插件: * Buffer Explorer - 使用\ be来查看缓冲区中的文件(并选择重新打开)

答案 36 :(得分:0)

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