我一直在VIM中学习新的命令,但我确信每个人都会偶尔学习新的命令。我最近才知道:
ZZ、ZT、ZB-屏幕中间、顶部或底部的位置光标
你希望多年前学会的其他有用或优雅的命令是什么?
- 请给我社区维基
- @尼尔:我以为你有超能力让它成为连续波。礼貌还是动力不足?
- 从技术上讲,ZZ、ZT、ZB将光标放在屏幕的中间/顶部/底部。要将光标定位在中间/顶部/底部,请使用m、h或l。这两组命令都很有用!
- 几个月或一年前读过这篇文章,以后每天都对我有所帮助。多亏了这篇文章,DAP是我一小时内多次移动段落的工具。
- 我从来没有从一个被标记为非建设性的页面上学到这么多技巧:)谢谢大家。
- 也许值得在area51.stackexchange.com/proposals/76728/…上继续这样做。
- :smile让你快乐
- 我可能建议stackoverflow的设计者考虑创建一种机制来自动传输这个页面及其超链接到它认为最合适的站点部分。这样就可以避免诸如"非建设性关闭"之类的错误陈述。
我真的希望我知道你可以使用ctrlc而不是esc来关闭插入模式。这对我来说真的是生产力的提升。
- 我重新映射了我的大写锁定到一个电子稳定控制系统。这比普通的Esc和Ctrl-C都简单
- 神圣的垃圾。我已经有15年的生命了,我从来都不知道…
- @凯姆:我把我的锁重新装上,这样比你的解决方案容易得多。在维姆以外工作。
- i do imap:w
- 另一个流行的方法是用"jj"来表示esc。到目前为止,我喜欢这种方法。地图!JJ < ESC >
- 你也可以使用ctrl-[(我喜欢它,因为它是两个小手指…只是双手稍微转动一下)。
- 在@claytron's上使用'jk'作为变体。如果您在不知情的情况下已经处于插入模式,jk会将您留在原来的位置,因此您可以随时点击它(学分:其他人…不是我的主意)。
- 真是太棒了。这是有道理的。
- 我有一个键盘,我不使用两个键:右小指和右小指。葡萄牙语键盘布局
- 我做"imap lkj",因为有时我使用"jj"和"jk"作为变量或实际文本——加上它有一种真正自然的感觉——只是从手指上滚下来。:)
- 这是一个很好的提示,但要小心:它破坏了可视块的功能。您必须按Esc而不是按Ctrl-C来正确插入块新文本,而不是只在一行上插入。
- 请记住,使用Ctrl-c退出插入模式不会触发InsertLeave自动命令事件。如果您有任何插件或脚本依赖于它,它们将无法工作。见:h i_CTRL-C。
- 我喜欢ctrl-[,它是标准的vim热键,在任何地方都可以使用。
- @埃米尔我喜欢把jk和kj都映射到中,这样我就可以同时点击这两个按钮,而不管我先按下哪个按钮都不重要。几乎就像一次击键。
- @gsk@shrikant看起来像ctrl-[与Visual Block和InsertLeave一起使用]。感谢对这个答案的评论,这是我将坚持的(我将不得不取消学习电子稳定控制系统…)。
- 我只想成为这里的"那个人",并稍微反驳一下jk离开你的正常模式的说法。当您位于缓冲区的第一行或最后一行时,这不是真的。(尽管如果它们是同一个,那是真的,因为你除了呆在原地,什么地方也去不了。)
- 这里是英国键盘布局用户。我重新映射"alt gr"以逃跑,所以它在我的右手拇指下。它使VIM更容易驾驶。
我学到的最新的"哇"技巧是一种进行复杂搜索和替换的方法。在过去的很多时候,我有一个非常复杂的regexp来做替换,但它不起作用。有更好的方法:
1 2 3
| :set incsearch " I have this in .vimrc
/my complicated regexp " Highlighted as you enter characters
:%s//replace with this/ " You don't have to type it again |
这里的"诀窍"(为了得到更好的单词)是使用搜索创建regexp(并且"incsearch"在输入字符时突出显示它),然后在替换中使用空模式:空模式默认为最后一个搜索模式。
例子:
1 2
| /blue\(\d\+\)
:%s//red\1/ |
相当于:
见:
1 2
| :help 'incsearch'
:help :substitute |
- 真的。。。我一直在找这样的东西
- 是的,我希望我早知道这件事。但再一次,这就是我所说的,关于我所学到的,在Vim中是新的东西。
- 对于真正喜欢这个的人,请尝试点击/插入最后一个搜索查询。(参见:help i_CTRL-R)对于类似于上面的内容非常有用,但您希望捕获部分搜索结果。(如:%s:/\\([fF]rank\\) and mary/marie and \1/g)
- :%s//...也可以与*一起使用(在光标下搜索单词)。一个名为Visual Star Search的插件扩展了*的功能,以匹配可视化选择的整个文本,从而使搜索和替换所选文本变得容易,例如v3e(可视化选择3个字)*(搜索)和:%s//replacement/g(替换所有出现的wi"替换")。我经常使用它,所以我有一个全局替换命令的映射::nmap s :%s///g。
- @idbrii因为人们阅读可能是vim noobs(我),所以%s:应该是:%s,对于我的系统,我需要\(\),而不是\\(\\)。
我为我的一个朋友创建了我最常用的命令的引用。希望人们能找到有用的东西:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| select v
select row(s) SHIFT + v
select blocks (columns) CTRL + v
indent selected text >
unindent selected text <
list buffers :ls
open buffer :bN (N = buffer number)
print :hardcopy
open a file :e /path/to/file.txt
:e C:\Path\To\File.txt
sort selected rows :sort
search for word under cursor *
open file under cursor gf
(absolute path or relative)
format selected code =
select contents of entire file ggVG
convert selected text to uppercase U
convert selected text to lowercase u
invert case of selected text ~
convert tabs to spaces :retab
start recording a macro qX (X = key to assign macro to)
stop recording a macro q
playback macro @X (X = key macro was assigned to)
replay previously played macro * @@
auto-complete a word you are typing ** CTRL + n
bookmark current place in file mX (X = key to assign bookmark to)
jump to bookmark `X (X = key bookmark was assigned to
` = back tick/tilde key)
show all bookmarks :marks
delete a bookmark :delm X (X = key bookmark to delete)
delete all bookmarks :delm!
split screen horizontally :split
split screen vertically :vsplit
navigating split screens CTRL + w + j = move down a screen
CTRL + w + k = move up a screen
CTRL + w + h = move left a screen
CTRL + w + l = move right a screen
close all other split screens :only
* - As with other commands in vi, you can playback a macro any number of times.
The following command would playback the macro assigned to the key `w' 100
times: 100@w
** - Vim uses words that exist in your current buffer and any other buffer you
may have open for auto-complete suggestions. |
- 你列出"~x"来标记x的名字。这对我来说不起作用-我用"'x"(单引号)。
- 真的。你的绝对权利。当我在打字指南时,我想我的眼睛只看到了那块瓷砖,并在后面的刻度盘上抹了一层。我会相应地更新。谢谢你的提醒。
- 我看到你用u和u来转换文本大小写。您可以使用~来切换大小写。
- 这张单子不错,但我真的想知道你是怎么画这张桌子的?用VIM?哪个插件?我正在找一个。
- 我使用了Vim,但没有插件。但是,使用"选择块"功能相对容易。很高兴你找到有用的列表!布瑞恩
- 块选择的ctrl-q是mswin.vim的一个特性,它允许ctrl-v粘贴。大多数VIM用户都会认为这是一种罪恶,并禁用mswin.vim。"+p或ctrl-r+插入剪贴板内容并不难。
- 谢谢你的V班,U班和U班!@高山88,~正在切换大小写,但有时我需要为混合大小写文本明确设置大小写,因此u和u非常有用。
- 天哪,这些年来我一直在使用gu/gu来改变这个案例,当时我只是在选择模式中需要u/u。我想你每天都能学到新东西。
GI切换到插入模式,将光标放置在与以前相同的位置。
- 当我发现埃多克斯的事时,我很高兴,现在这让我感动得流下了眼泪。
- 好哇!!!!G岩!
- 不是同一个"A"吗?
- @龙德奇道一点也不。它返回到最后一个插入点。所以你可以滚动你的心内容,它会把你拉回到你上次插入的地方。
- fyi,g;(上面提到的@patrickoscity)将光标放在进行编辑的地方。你可以多次使用它来追溯历史。注意到这一点是因为我的Vim帮助出于某种奇怪的原因没有提到这一点。
- 维姆的直觉一直给我留下深刻印象。因为@ponnays提到了g;,我试着让它的"反面"是g,,看吧,我们可以前后移动!
- a较短。:)但是gi确实非常直观,因为g通常是相反的操作。
- @不过,欧文·鲁伊·雅克克斯A和美国地理学会完全不同。
我真希望在第一次使用vi之前就知道这一点
- 我记得同一天第一次尝试Vim和Emacs,也不知道如何退出。我心里想,这些人到底怎么了!?
- + 1。第一次启动VIM时,默认消息应该是"write:q to quit"。我会节省很多时间的,哈哈
- @jos&233;ram&243;n但如果您输入vim而不打开文件,则默认情况下它会显示在屏幕上。这是最近添加的吗?我清楚地记得几年前我试过维姆,它已经存在了。如果您试图退出而不保存缓冲区,它还会告诉您使用:q!。
- @是的,你可能是对的,但只有当你打开VIM时没有文件。通常,第一次打开vim是因为您需要在UNIX中编辑一个配置文件,所以您编写"$vim file"而找不到出路。还是只有我一个人?
- @jos&233;ram&243;n我认为您的体验非常罕见-考虑到nano是可用的,而且大多数对Unix来说是新的,可能对任何一个都不了解,我认为您第一次运行vim时,不太可能打开任何文件。也就是说,它可能有一些关于如何戒烟或寻求帮助的提示,但是,我觉得这个设计非常优雅,我也会这么做。从设计的角度来看,有多少次你会期望一个不认识Vim的人故意使用Vim来编辑文本文件?从命令行也不例外。如果你惊慌失措,你可以随时关闭航站楼。
- @Lernkurve出奇地推出了:qxxqa!!打电话,直到太晚才注意到我。
- 拖钓。梅说得很好。
- @丹尼尔波普斯,这不是一个巨魔,这是一个持续的笑话,人们谁第一次打开维姆(或意外)往往不会知道如何退出它。
- 我感觉到一种模式起源于很久以前-"让我们看看一个典型的新手与强大的ED对话:"gnu.org/fun/jokes/ed-msg.html
- @丹尼尔波普斯,你怎么看不到这是个笑话?谁被拖走了?
- @德雷瓦尔,为什么完全不同?
- @欧文鲁伊雅克克斯?
- @德雷瓦尔我回答了gi和a之间的区别。你说,在某个地方,它们"完全不同"。
- @埃尔温鲁伊雅克,他们是。你不可能处于一个你可以选择其中一个而不是另一个的位置。
- @德雷瓦尔,他们有什么不同?
- @一个在当前光标位置后附加文本,另一个将光标移动到编辑文本的最后一个点,并将您置于插入模式。考虑到你没有在正确的位置上添加你的评论,在完全不同的答案下面提问,你会发现这种区别是如何在你身上消失的!
- 哦,真的。:)
- 作为一个Emacs的家伙,这是我读过的最有趣的评论。但不确定你的意思。你今天让我高兴。
^ x-f使用当前目录中的文件名完成。不再从终端复制/粘贴或重复检查。
^ x-p完成在当前文件中使用单词
:set scrollbind强制一个缓冲区与另一个缓冲区一起滚动。例如,将窗口分成两个垂直窗格。在每个文件中加载一个文件(可能是同一文件的不同版本)。各做一次:set scrollbind。现在,当您滚动到一个窗格中时,两个窗格将一起滚动。非常适合比较文件。
- 启用滚动绑定后如何禁用它?
- Jinxed编码器:用:set noscb关闭,用:set scb打开(不是:scrollbind)。:h scrollbind
- 哎哟。更正为":set scrollbind"。
- ^ x-p优先于文件中的前一个单词完成,^x-n优先于文件中的下一个单词。
- 您还可以通过打开文件1并运行:diffsplit file2或只使用vim -d file1 file2启动vim来区分文件。VIM自动滚动绑定两个文件。
- 只需在插入模式下按ctrl-x,您就可以看到底部的所有可用命令,如-- ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)for,例如,^x-d for definition completion。
- @Prabhatkumarsingh在哪里是阅读这些文章的好地方?例如,对于^X ^D,我在google上找不到太多(我还没有有效地学习如何导航:h)。
永远不要按Escape键。看看这个答案来了解原因。如上所述,ctrl-c是更好的选择。我强烈建议映射您的Caps Lock键以进行转义。
如果您正在编辑与ctags兼容的语言,使用标记文件和:ta、ctrl-]等是导航代码的好方法,甚至可以跨多个文件。另外,使用标记文件完成ctrl-n和ctrl-p是减少击键的一个很好的方法。
如果你正在编辑一条因为比缓冲区宽而被包装的线,你可以使用gk和gj上下移动。
在你学习坏习惯之前,试着集中精力有效地使用动作指令。像使用"dt"或"d3w"而不是多次按x。基本上,只要你发现自己反复地按同一个键,就可能有更好/更快/更简洁的方法来完成相同的事情。
- 不使用逃跑?那是异端邪说。逃跑是你最好的朋友,不管是工作上还是工作下。
- 如果它是一个好朋友,为什么它在键盘上那么远?
- 因为99%的人从不使用它。
- 在我的键盘上,Escape和其他键的间距只有几英寸。你不会错过的。
- 3真是棒极了!还在学习新东西…
- @布兰卡帕现在看着你的左手,连续20年每天用它几千次。等等,哪个左手?
- 在Windows或其他程序中使用夏普键将转义映射到Caps Lock。GK和GJ对我来说是个新闻,而且非常有帮助,因为我一直在寻找可以做到这一点的东西。
- 不完全理解;我使用:se nowrap,然后你就不用担心了。
- 为什么?为什么?(维基百科第六页现在没有提到这一点)。
- 编辑。请参阅此答案:stackoverflow.com/a/8020436/64290
- 我将caps-lock映射到ctrl,因为我使用ctrl的次数比vim中的任何其他修改器都多,它完全消除了对crab处理的需要。jk是我的电子稳定控制系统。
您可以使用一整套命令来更改括号/圆括号/引号/标记内的文本。避免找到团队的开始和结束是非常有用的。根据您要更改的对象类型,尝试ci(, ci{, ci<, ci", ci', ct。ca(, ca{, ...变体也删除了括号/引号。
容易记住:在加括号的语句内更改/更改加括号的语句。
- 这不仅仅是为了江户十一〔六〕年。你可以用d来删除(例如di(或da(),y来扬克,v来选择等等)。
- 你好!我想知道这方面的文档使用的是:help?我哪儿也找不到。< <
- @Matejnanut:当然。试试:help motion。然后,看看:help c和:help d和:help y等,它们都在运动。
- @彼得,我之前已经检查过这些,但是没有发现提到特殊的"内部+定界符"行为。原来是在:help motion.txt里!谢谢!
- 这是我为什么一开始就切换到vi的唯一原因:)
- 如果要编辑HTML或XML,可以使用cit更改当前标记的内容。例如,在Some text</span>中,如果光标位于"m"上,则可以执行dit以获取</span>。
- 帮助::h motion.txt和search/goto'6。文本对象选择'
ZZ(与:wq类似)
关于光标位置。我发现总是停留在屏幕中间的光标很酷
- 不知道。:x也这样做了。
- 不完全准确。工作方式类似于:x,它只在有更改时保存文件,而:wq总是保存文件。
- ZQ(工作方式:Q!)
星号键*将搜索光标下的单词。
[+t将带您进入光标下的C函数定义。(但并不总是有效。)
- 如果您使用*nix来学习如何生成一个"tags"文件,告诉Vim如何查找除C之外的多种语言中任何函数或变量的定义,请尝试使用"man ctags"。使用ctrl+]在光标下查找标记的定义,或使用:tag tokentoffind查找它知道的任何标记。您甚至可以用"vim-t tokentoffind"启动vim来打开适当的文件,并将光标定位在需要编辑的函数上。
- 键将反向搜索光标下的单词。
- github.com/bronson/vim-visual-star-search允许对视觉选择进行星搜索。我不想再错过它了。
- 当您使用所需文件夹(如set path+=path/to/files扩展path时,[ + Tab 始终有效。
我最新加入的Vim智能商店:
- ^wi:通过拆分窗口跳转到光标下的标记。
- cib/ciB:分别更改当前括号()或大括号内的文本。
- :set listchars=tab:>-,trail:_ list:显示与其他空格不同的制表符/尾随空格。对Python编码有很大帮助。
- 这需要更多的选票!cib很棒。
- 另外:ciw要更改当前单词(或caw,相同但仅限于左手),ciw要更改当前w=o.(r-d),用v代替c的sames将在视觉中选择,而不是替换
- cib相当于键入"ci"(。您也可以为其他类型的括号执行"ci[","ci",或者(如果VIMRC设置正确)"ci<"。
- 另外,"cit"可以更改标记内的文本。使用XML/HTML时非常有用。
- 另外值得一提的是,如果你喜欢的话,你可以用右大括号作为后缀。另外,我刚刚了解了ci}和cit,哇,这将非常有用。vi[m]是一个非常令人兴奋的项目!
:shell从vim启动shell控制台。例如,当您希望在不退出vim的情况下测试脚本时非常有用。只需在完成shell控制台后点击^D,然后返回到vim和编辑的文件。
- 我想:!sh太难了。我更喜欢这样做,因为使用当前缓冲区中的寄存器/完成来编写命令行比较容易,或者使用%/%:h作为当前文件名/目录名等。
- 这个很酷。我每天都用它……在此之前,:wq,执行cli操作,用相同的文件重新打开vim。很好的优化
- ctrl-z切换到shell,fg返回vim。
- 把map ! :shell放在你的.vimrc里,你就可以用alt+发射外壳了!,或Alt+Shift+1。(助记符::!{cmd}用shell执行{cmd}。)
- 不过,:shell将启动一个新的嵌套shell级别。而ctrl-z没有。
GV启动视觉模式并自动选择您以前选择的内容。
这总是让我高兴
虚拟化
vim-x文件名.txt
系统将要求您输入密码、编辑和保存。现在,每当您再次在vi中打开文件时,您必须输入密码才能查看。
- 将它与Dropbox同步,您会得到一个非常好的密码管理器;-)
- 但请注意,除非您使用的是cx1(3)(仅在7.3+中可用),否则它将使用具有可笑强度的算法。更多详情请参见help encryption。
- 您也可以使用:x
- 请不要使用VIM加密,加密不好,安全性不好是最差的。更多信息:github.com/neovim/neovim/issues/694
- dgl.cx/2014/10/vim-blowfish meta tldr:"固定在vim 7.4.399[groups.google.com/forum/!msg/vim_dev/d8fyrd0ewle/bkboo hzt&zwnj;&8203;zoj]由于向后兼容的原因,它需要是一种新的加密方法,因此使用:set cm=blowfish2"
在vim中构建和调试代码!配置
不多,真的。在当前目录中需要一个Makefile。
编译
在vim中,输入:make来调用shell,构建程序。当输出滚动时,不要担心;完成后,只需按[Enter]返回vim。
魔力
回到VIM中,您可以使用以下命令:
:cl列出了错误、警告和其他消息。
:cc在屏幕底部显示当前的错误/警告消息,并跳转到代码中的违规行。
:cc n跳到n第条消息。
:cn前进到下一条消息。
:cp跳到上一条消息。
还有更多;如果您感兴趣,请在vim中键入:help :cc。
- 不仅仅是编译代码。也就是说,任何写在makefile中的任务都是很好的用途。
p和^ n
完成上一个(^p)或下一个(^n)文本。
^和^ i
转到上一个位置(^o-"o"代表旧位置)或下一个位置(^i-"i"靠近"o")。当您执行搜索、编辑文件等操作时,您可以前后浏览这些"跳转"。
标志
按m a(m-mark,a-mark的名称)。稍后返回到位置类型'A
- 哇,我不知道^o和^i:太棒了。如果有人想要更多的信息,在你的答案中包括:help jump-motions等可能是值得的。
- 查看showmarks vim.org/scripts/script.php?script_id=152。它将帮助您记住所有标记在缓冲区中的位置和内容。您可以使用mt打开和关闭可视化
- 我不知道^P和^N之间的区别…
- @拉贾尔,它们在相反方向的可用完井列表中循环。
- 我经常在打开vim时使用^o^o,因为我注意到我想再次编辑上次编辑的文件。节省大量时间!
当光标位于引号、括号、括号或大括号上时,按%以查找其匹配项。
- 如果光标不在其中任何一个上面,它就会向右移动,直到碰到其中一个为止。
- @L&233;O:谢谢您的奖金提示!
直到[字符](t)。适用于任何接受范围的命令。我最喜欢的是ct;或ct),它删除了尾随分号/右括号之前的所有内容,然后将您置于插入模式。
另外,G和gg也很有用(分别从下到上)。
- 最好的一个,虽然其他的一些也很有用,但我已经知道了。
- 另外,f而不是t,它将通过该字符[操作];例如,将光标放在函数参数的开头,df,将删除它(当然是用适当的语言)。
- t和f非常适合编辑camelcase变量的一部分。例如,如果您只是复制了一行,并且需要将第一个变量更改为第二个变量,那么将光标放在第一个变量的开头,然后是ctv
- T和F也起作用,但方向相反。
^r^w在命令模式下将单词粘贴到光标下。使用grep或replace命令时非常有用
- 绝对无价之宝
- 如果它是您唯一想要的单词,那么*在正常模式下将在光标下搜索该单词。
我希望我早点知道基本的视觉块模式。即使您不将vim用于任何其他用途,在vim中打开一个文件只用于某些块操作也可以节省大量时间。我很肯定我浪费了很多时间手工做这种事情。
我发现的示例特别有用,例如,当一致地重构符号常量名列表时:
进入可视块模式(CTRL Q for Me on Windows而不是CTRL V)
移动光标以突出显示所需的块。
然后,I whatever text并按esc将文本插入每行的块前面。
使用A而不是I在每行的块后面插入文本。
此外,使用~简单地切换视觉选择的情况可以节省大量时间。
当然,使用d也可以简单地删除列。
输入一个行号,然后输入gg,您将进入该行。
- :后接行号是否相同:42转到行号42
- 输入一个后接G的行号具有相同的效果。
- go转到文件中的第个字符。
^ Y将复制光标上方的字符。
Q-记录宏。
和
@-回放。
这些是到目前为止VIM中最有用的命令,因为您可以让计算机为您做大量的工作,甚至不必编写程序或任何东西。
- q的使用简化了问题,但您不需要使用它:只需将缓冲区命令"保存到指定的缓冲区中—例如,使用缓冲区a"ad$……
- @mei q记录宏;宏可以包含命令,而不仅仅是文本,因此"ad$与qa不同。
- @有点像初学者,这和这里无关。命令"ad$puts text into buffer A and qa runs it.
- @Mei qa不运行,qa记录,@a运行。的确,您可以用纯文本编写宏,将其存储在寄存器a中,类似于"ad$,然后用@a执行宏,但这要花很多时间。剪切、粘贴、记录和运行之间存在根本区别。
- 呸!我早就知道了。谢谢你的纠正
使用选项卡打开多个文件:
在打开的文件之间导航
1
| gt and gT or :tabn and :tabp |
保存打开的会话,以便稍后返回打开的文件列表:
1
| :mksession session_file_name.vim |
打开创建的会话
1
| vim -S session_file_name.vim |
一次关闭所有文件
我最近学到的另一个命令是:
它允许您对事件运行命令,以便您可以在保存文件时运行命令make,方法如下:
1
| :autocmd BufWritePost *.cpp :make |
QX将开始记录击键。你几乎可以做任何编辑任务,Vim会记住它。完成后再按q键,然后按@x键重放击键。这对于重复编辑非常有用,因为重复编辑太复杂,无法为其编写映射。您可以使用X以外的字符录制许多录音。
- 同样,"q"record宏命令和命名的剪贴板("x…")之间共享相同的字符"x"。您可以将宏片段放在文件周围,并将其复制到指定的剪贴板(例如"xyy"),然后回放(@x)。
- 如果您曾经创建过awesomist宏,那么您可以使用"let@x="(将宏放入)将该剪贴板放入您的vimrc,并将其永久保存!
我不得不说,我最喜欢的方法之一是将"帮助"窗口置于新的选项卡中:
这在一个新的标签中打开了帮助,并且,作为一个喜欢vim标签的人,这是非常有用的。
- 缓冲器是VIM的标签。VIM工作流更好地支持它们。我怀疑标签只是添加到VIM中,因为太多人不了解缓冲区。
- 好吧,这么说后不久,我发现在vim中使用tabs。如果每个选项卡使用一个缓冲区,则需要了解缓冲区。这不是选项卡在VIM中的用途。大多数高级VIM用户使用缓冲区的方式与大多数程序中使用选项卡的方式相同。许多人认为标签应该被命名为VIM中的布局。它们主要用于在不同的选项卡中打开不同的窗口集合。您还可以有一个特定的缓冲区,您可以在一个选项卡中返回到许多打开的缓冲区,并使用另一个选项卡查看所有其他缓冲区。
:b [any portion of a buffer name]切换缓冲区。因此,如果您有两个缓冲区"somefile1.txt"和"someotherfile2.txt",则只需使用EDOCX1[1]即可切换到第二个缓冲区。它还支持选项卡完成,尽管这不是必需的。
说到制表完成,设置:set wildmode=full wildmenu也很有帮助。它为命令模式启用了完整的制表符完成功能,以及在使用时所有可能匹配的非常有用的ncurses样式菜单。
:%s,/搜索,/替换,
您可以使用其他字符而不是??分离替代模式。这样就不必逃避文件路径的斜线。
- 哦,地狱,是的。我知道以东十一〔11〕有这个,但以东十一〔12〕没有。你知道的越多?额
1
| :x #(Save and Quit a File) |
同:WQ或ZZ
- 对于那些太喜欢:wq的人,我用:command! Wq :wq来处理那些烦人的案件,因为我不能足够快地离开我的值班钥匙。
连续波
更改单词-删除光标下的单词,并将您置于插入模式以键入新的单词。当然,这与其他的移动键一起工作,所以你可以做一些像C$这样的事情来改变行尾。
F+字符
查找字符在当前行上的下一个匹配项。因此,您可以使用vft来选择当前行上下一个"t"之前的所有文本。这是另一个移动键,所以它也可以与其他命令一起使用。
标签介面除了拆分窗口外,还可以有选项卡式窗口。在Escape模式中,键入:tabNew。您可以像这样打开多个选项卡。要在选项卡之间导航,请键入tabn。这将移动到下一个选项卡。要移动到选项卡式窗口,请键入:tabn2以移动第二个选项卡,依此类推。
要关闭选项卡,请键入:tabc或:tab close或just:close。
如果您在终端仿真器中(基本上是GUI中的终端),那么您可以尝试这样做:设置鼠标=A。完成后,您可以用鼠标在编辑器中单击。这还可以帮助您通过单击在选项卡之间导航,也可以通过单击右侧的"关闭"按钮来关闭。
对齐代码-完整文件只需在退出模式中键入g=gg。
折叠代码假设您有一个已完成的函数。您希望最小化(或折叠)这部分代码,以便释放一些空间并减少混乱。只需选择代码。然后,输入:折叠。
这将把代码折叠起来。如果要扩展代码,只需转到那里,然后键入zo。要再次折叠,请键入zc。
我很惊讶没人提到维姆的窗口支持。我几乎每次打开VIM时都会用到CTRL-W s。
我经常为编辑任务创建函数,并将它们存储在.vimrc中,以便再次找到它们。例如,读取已转换为单行的.NET调用堆栈:
1 2 3 4 5
| function! FixCallStacks()
:%s;\[NLN\];
;g
:%s;\[TAB\];\t;g
endfunction |
更进一步,我不能告诉你我用过多少次了:
:%!sort
对文件中的项目列表进行排序。
细节:
:range!command
将对指定的行范围执行shell命令。范围通常指定为start,end。
Examples:
1,3 specifies the first 3 lines
'a,'b selects the text between bookmarks a and b
.,$ selects the entire document (. = first line; $ = last line)
% is a shortcut for .,$ and also selets the entire document.
可以随意混合和匹配数字、书签、.和$。
- 我更喜欢VIM的内置百分比排序。:帮助排序列出了许多美味的选项。
:qall和:wqall关闭所有拆分屏幕
- 不确定是否假定使用短表单,但在这种情况下,它们不是::qa和:wqa执行相同的操作。
注释一系列行:
首先在范围开始处设置书签:ma
转到范围内的最后一行
命令是
:'a,.s/^/# /
假设是您的评论角色。
- 此外,使用ctrl+v或ctrl+q选择范围内每行中的第一列,然后使用i(在选择之前插入)在每列的开头插入,然后#
- 或shift+v,选择一个范围,然后:'<,'>normal i#
1 2 3
| ma
move cursor down
:'a,.!program |
这将获取您将a标记(ma)设置为当前行(.)之间的所有文本,运行程序,并用结果替换标记区域的内容。您甚至可以使用它来查看目录的内容(例如),方法是创建一个空行,然后将光标放在该行上,
哦,你可以为A-Z(即MA)设置这样的标记,还有
将跳转到标记为"A"的位置。
/向前搜索,然后?向后重复搜索,而不必重新提供搜索模式。
好东西。vi被严重低估。一旦你掌握了它的窍门,你就永远不会想使用由IDE提供的编辑器。
- 对于:.!ls,我会更合理地使用:r !ls,因为它不会从缓冲区接收输入并创建行。我使用:r !uuidgen例如
我在浏览VIM帮助时发现了这个:
这将带您进入单曲(可搜索!)页面上显示所有模式的所有命令。
因此,如果您知道您试图记住/学习的命令是从某个按键开始的,或者涉及到某个按键,那么您可以搜索该命令并浏览所有可能的方法。或者你只需浏览你感兴趣的模式就可以看到/学习编辑的可能性。
我不知道我做了多少次,只做了多少次,得到的只是第一件事,当然不是你想要的那件。这比:帮助我。
编辑
然后进入.vimrc:
1 2
| nnoremap <silent> <F1> :help normal-index<CR>
inoremap <silent> <F1> <C-O>:help insert-index<CR> |
:help仍然可以进入默认的f1页面。
选项卡&explore(在生成浏览器窗口之前是否新建选项卡)
- 我得到了E464: Ambiguous use of user-defined command。
在bash中的命令行上使用vim绑定:
另一方面,使用程序读取行,点击control-alt-j从emacs切换到vim绑定。
在我们的软件商店中,变量声明需要排序。在我们使用的语言中,多个变量可以出现在同一行上。
在视觉上尝试对每一个变量进行排序是非常痛苦的。vim中的block highlighting和sort命令是我的朋友:
将光标移动到要排序的第一个变量。
发出v命令进入视觉模式。
将光标移动到要排序的最后一个变量的末尾,在我的示例中,我输入$以转到行的末尾)。
执行!sort命令告诉vim对突出显示的文本进行排序。
只有在底层系统上存在"sort"命令时,这才有效。
我知道这不完全是维姆。但是我发现CScope集成非常好,它在入侵Linux内核时帮助了我很多。
ctrl-g以达到函数的定义ctrl-s查找函数/宏/变量的所有用法。
set confirm允许您用:q优雅地退出vim。您不需要使用zz或其他笨重的机制来盲目保存或丢弃所有更改。
对于强迫性VIM配置,请查看https://github.com/jmcantrell/dotfiles-vim