什么是基本的 vim 命令?新用户需要知道什么才能避免陷入麻烦?请每条评论一条命令。
36 回答
我发现不可替代的(因为它也可以在 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”,你就会明白我的意思了。
当我学会使用 * 或 # 分别向下或向上搜索光标下的单词的那一天,我感到非常高兴。确保:set incsearch
和:set hlsearch
首先。
当你有一些重复的动作要执行时,宏通常比正则表达式更快。只需键入
q[0-9a-z] in normal mode
很多人用
qq
因为它很快。在正常模式下再次按 q 可停止录制。然后只需输入
@[0-9a-z] in normal mode
重复刚才录制的内容。
@q
对于上面的例子。
编辑添加:您还可以重复宏。假设您编写了一个宏来跳转到行首,插入一个制表符,然后跳下一行。然后,您可以通过键入“@q”来测试您的宏以运行一次。然后,您可以通过键入“9@q”再重复该操作九次。
使用“J”(J 表示加入;大写)命令删除行尾的换行符。否则你会发现它很棘手。
: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
我想这些是基本的开始
IBM 最近的这个Vim 教程非常好
首先你需要知道如何关闭vi: ctrl-c :q!
其余的可以从 vimtutor 中找到。通过在命令行输入 vimtutor 来启动 vimtutor
尽管这是个人喜好问题,但我发现要做的重要事情之一就是重新映射Esc到其他东西。
我发现按下退出插入模式的键非常不舒服Esc,但 Vim 的美妙之处在于它允许键映射。
我目前正在使用以下映射Control+ S:
inoremap <C-s> <Esc>:w<CR>
这具有作为我已经提交到内存的键映射的优点,并且每次进入正常模式时都具有保存我的工作的附加价值。是的,我知道这很疯狂,但无论如何我都会经常点击保存命令。这就像一个坏习惯,你知道的。
请参阅http://www.rayninfo.co.uk/vimtips.html以获取大量 Vim 技巧的集合,从基本的无法生存到您可能从未想过尝试的非常复杂的东西。
" ~/.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>
如果您使用 vim,“u”命令(在命令模式下)将撤消您输入的最后一个命令。您可以重复使用此命令来撤消您在保存文件之前可能犯的错误。
Vim Tips Wiki中列出了许多很棒的命令。
:%!xxd
以十六进制查看缓冲区的内容。要还原:
:%!xxd -r
别名 vi 编辑 :)
抛开所有的幽默.. 对于 vi 不使用 nedit..
i
(切换到插入模式)a
(追加 = 移动到行尾并切换到插入模式)esc
(退出插入模式)dd
删除一行x
删除一个字符:wq
(保存并退出)/
开始搜索n
找下一个?
向后搜索..yy
(yank) 复制一行到缓冲区pp
(粘贴)粘贴到这里r
(替换一个字符)<N> <command>
这是一个简洁但令人讨厌的功能,可让您输入数字,然后输入命令5dd
将删除 5 行
但在这一点上,你不妨 -man vi
并刷新你的记忆
虽然还有很多,但几年前我从 Vi 切换到了 nedit,我发现它具有更多我可以更轻松地定期使用的功能。选项卡式编辑、增量搜索栏、列选择、复制和粘贴。对选定的行进行排序,在选择、整个文档或所有打开的文档中进行搜索和销毁.. 撕下下拉菜单.. 它支持我使用的所有语言的语法突出显示.. (我使用了很长时间的模式文件多年来,VIM 现在很多都是等效的,但是它必须引入 Nedit 没有的功能,以及在我再次切换之前迁移我的模式文件的简单方法。
学习这些命令的时候运行vimtutor也不错
我用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)
我知道还有很多,但这些足以让你度过难关。
我最大的提示:ctrl+qctrl保存您不小心点击+s保存您正在处理的文件的那一天
我喜欢 Bram Moolenaar 和 Oleg Raisky 的Vim 5.6 参考指南。
你可以直接打印成小册子的形式,方便阅读,我一直在身边。
它有点老了,但是 Vi 的 8 年寿命是多少?
:set ignorecase smartcase
使搜索不区分大小写,除非您的搜索包含大写字母。也许不是最不可或缺的,但我发现自己在任何时候在新地方编辑时都会设置这个选项。它在我拥有的任何 vimrc 文件中。
我的 vimrc 里有这个
set number
set relativenumber
这给了我一个行编号系统,它使j,k键真正富有成效。
:g/<pattern>/t$
将复制<pattern>
到文件的末尾。当您想提取线条但不想一一提取时很有用。
几个月前,我从 Textmate 切换到了 VIM,并写了一篇关于如何在 VIM 中执行 110 个 Textmate 编辑命令的指南。它按类别组织,例如管理文件、自动完成单词和语法突出显示。
正如其他几个人已经提到的那样,vimtutor 是要走的路。它会教你在 vim 中需要知道的一切。我会给你的一条一般建议是尽可能远离插入模式。其他模式也有很大的威力,只需要一点点练习就可以适应。
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
将文件中的“foo”替换为“bar”:%s/foo/bar/gc
我最喜欢的命令之一是 %G,它直接到文件末尾。在日志文件中特别有用。
如何在模式之间切换(i 进入插入模式(多种方式之一),esc 退出插入模式,冒号表示命令模式)以及如何保存和退出。(:wq)
另一个有用的命令是搜索某些东西: / 例如 /Mon 将搜索(并且在 vim 高亮的情况下)您文件中出现的任何 Mon。
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 查看缓冲区中的文件(并选择重新打开)
注意 vi 不是 vim!vim 正在迅速变成新世纪的 emacs。nvi 可能是最接近原始 vi 的东西。这是一个很好的提示:“xp”将交换两个字符(试试看)。
真正的力量在于寻找。以下是基本命令:
/Steve 将在文本中找到“Steve”的第一个实例。n 将在文本中找到下一个“Steve”。:%s//Stephen/g 会将您刚刚搜索的所有“Steve”实例替换为“Stephen”。
不是为了推销自己,而是我写了一篇关于这个主题的博客文章。它侧重于初学者的 Vim 的关键部分。
没有人提到旺盛的ctags?谷歌并安装它;比您可能拥有的默认 ctags 好得多。要使用它,请 cd 到您的项目根目录并输入
:!ctags -R 。
在名为 tags 的文件中构建项目中所有内容的数据库...java、c++、python、ruby、javascript,任何东西。
:help ctags 用于使用生成的标签的大量命令,无法概括。将光标放在函数名上,键入 CMD ],打开定义它的文件。更多类似的命令。很快就变成了第二天性……几乎和 IDE 一样好(而且 VIM 永远不会像 eclipse 经常做的那样让你失望。
我使用此处的教程迈出了第一步,并且已经使用参考备忘单几个星期了。而且,当然,在 vim/gvim/Macvim 中有 vimtutor。
有时最好重新格式化缓冲区(即重新制表、对齐大括号等)。我最近学到了一个节省时间的方法:
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>
请参阅此站点以获取学习基本运动命令的有趣方式:http: //kikuchiyo.org。我认为线程中涵盖了大多数基本命令,但我总是喜欢向 vim 的新手推荐这个。单击 train first 链接,其中包含基本移动命令的图例和i
拾取红宝石的插入命令。快速移动的好习惯。