我一直在学习Vim中的新命令,但是我确信每个人都会不时地学到一些新东西。我最近才了解到这一点:
zz,zt,zb-屏幕中间,顶部或底部的位置光标
您希望在很久以前就学到其他有用或优雅的命令吗?
我一直在学习Vim中的新命令,但是我确信每个人都会不时地学到一些新东西。我最近才了解到这一点:
zz,zt,zb-屏幕中间,顶部或底部的位置光标
您希望在很久以前就学到其他有用或优雅的命令吗?
Answers:
我真的希望我知道您可以使用CtrlC而不是Esc退出插入模式。对我而言,这确实是生产力的提升。
我了解到的最新“哇”技巧是一种进行复杂的搜索和替换的方法。在过去,我经常使用非常复杂的正则表达式来进行替换,但这种方法不起作用。有一个更好的方法:
: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
这里的“技巧”(需要一个更好的词)是您可以使用搜索来创建正则表达式的方法(当输入字符时,“ incsearch”会突出显示它),然后在替换中使用空模式:模式默认为最后一个搜索模式。
例:
/blue\(\d\+\)
:%s//red\1/
相当于:
:%s/blue\(\d\+\)/red\1/
看到:
:help 'incsearch'
:help :substitute
<Ctrl-R>/
以插入最后一个搜索查询。(请参阅参考资料:help i_CTRL-R
)对于类似于上面的内容确实很有用,但是您希望捕获部分搜索结果。(这样的:%s:/\\([fF]rank\\) and mary/marie and \1/g
)
:%s//...
也可以使用*
(光标下的搜索词)。名为visual-star-search的插件扩展了的功能,*
以匹配视觉选择的整个文本,从而使搜索和替换所选文本变得容易,例如v3e
(视觉上选择3个单词)*
(搜索)和:%s//replacement/g
(将所有出现的位置替换为“替代”)。我经常使用它,以致于有一个全局替换命令的映射::nmap <Leader>s :%s///g<left><left>
。
%s:
应该是:%s
,对于我的系统,我需要的\(\)
不是\\(\\)
我为我的一个朋友创建了我最常用命令的参考:
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.
gi切换到插入模式,将光标置于以前的位置。
g;
现在令我感动的时候,我感到非常高兴:-)
g;
我尝试过将其g,
与“对立” 相望,所以我们可以往回走!
a
更短。:)但是gi
确实很直观,g
通常是相反的操作。
:q!
我希望我在第一次启动vi之前就知道这一点。
:q!
是否尝试退出而不保存缓冲区。
^ XF使用当前目录中的文件名完成。不再需要从终端进行复制/粘贴或痛苦的仔细检查。
^ XP使用当前文件中的单词完成
:set scrollbind强制一个缓冲区与另一个缓冲区一起滚动。例如,将窗口分成两个垂直窗格。每个文件加载一个文件(同一文件的版本可能不同)。不要:set scrollbind
只。现在,当您滚动其中一个时,两个窗格将一起滚动。比较文件的理想选择。
:set noscb
将其关闭并用于:set scb
将其打开(不是:scrollbind
)。:h scrollbind
:diffsplit file2
或仅以vim来启动diff文件vim -d file1 file2
。Vim自动滚动绑定这两个文件。
您可以使用整套命令来更改方括号/括号/引号/标记内的文本。避免必须找到组的开始和结束非常有用。尝试ci(, ci{, ci<, ci", ci', ct
根据要更改的对象类型进行选择。并且ca(, ca{, ...
变体也会删除方括号/引号。
容易记住:在方括号内更改/更改方括号内的语句。
c
。您可以d
通过删除来进行此操作(例如di(或da(),y
拉动,v
选择等
:help
吗?我在任何地方都找不到。> _ <
:help motion.txt
!谢谢!
cit
来更改当前标记的内容。例如,在中<span>Some text</span>
,如果光标位于“ m”上,则可以dit
获取<span></span>
。
Esc永远不要按。查看此答案以了解原因。如上所述,Ctrl+ C是更好的选择。我强烈建议您映射Caps Lock密钥以进行转义。
如果您要编辑与Ctags兼容的语言,则使用标签文件和:ta
,Ctrl+ ]等是浏览代码的好方法,即使跨多个文件也是如此。另外,使用标记文件的Ctrl+ N和Ctrl+ P完成是减少击键的好方法。
如果要编辑的行比缓冲区宽,则换行时,可以使用gk和gj上下移动。
在学习不良习惯之前,尝试着重于有效使用运动命令。诸如使用'dt'或'd3w'之类的事情而不是按x多次。基本上,每当您发现自己反复按相同的键时,可能会有更好/更快/更简洁的方法来完成同一件事。
星号键*将会在光标下方搜索单词。
[+ Tab将带您进入光标下方的C函数的定义。(不过,它并不总是有效。)
[ + Tab
当您path
使用所需的文件夹扩展set path+=path/to/files
ZZ
(像:wq
)
关于光标位置:我发现始终停留在屏幕中间的光标很酷-
set scrolloff=9999
:x
也会做到这一点
:x
,仅在发生更改时:wq
保存文件,而始终保存文件。
我在Vim Brainstore中最新添加的一些功能:
^wi
:通过拆分窗口跳到光标下方的标签。cib/ciB
:分别更改当前括号()或大括号{}中的文本。:set listchars=tab:>-,trail:_ list
:显示选项卡/后跟空格在视觉上与其他空格不同。它对Python编码有很大帮助。cib
是很棒的。
ci}
&cit
-哇,这将非常有用。vi[m]
证明是一个非常令人兴奋的程序!
:shell从Vim启动Shell控制台。例如,当您要测试脚本而不退出Vim时很有用。在完成Shell控制台后,只需按^ d,然后返回Vim和已编辑的文件。
:!sh
太难了。我更喜欢,因为它使用的寄存器/完井从当前缓冲区或例如使用更容易撰写命令行%
/ %:h
对当前文件名/目录名等
map <Esc>! :shell<CR>
你的.vimrc
,你可以只是ALT +!或ALT + SHIFT + 1启动外壳。(助记符:使用shell :!{cmd}
执行{cmd}
。)
:shell
将会开始一个新的嵌套外壳层。而ctrl-z
没有。
病毒加密
vim -x filename.txt
系统将要求您输入密码,进行编辑并保存。现在,每当您再次在vi中打开文件时,都必须输入密码才能查看。
set cryptmethod=blowfish
(仅在7.3+中可用),否则它将使用具有可笑强度的算法。请参阅help encryption
以获取更多详细信息。
:set cm=blowfish2
“
真的不多。您需要Makefile
在当前目录中。
在Vim中时,键入:make
以调用Shell并构建程序。当输出滚动时,请不要担心。Enter完成操作后按即可返回Vim。
回到Vim中,您可以使用以下命令:
:cl
列出错误,警告和其他消息。:cc
在屏幕底部显示当前的错误/警告消息,并跳转到代码中令人反感的行。:cc n
跳转到n
第消息。:cn
前进到下一条消息。:cp
跳到上一条消息。还有更多 如果您有兴趣,请:help :cc
在Vim中键入。
完成上一个(^ P)或下一个(^ N)文本。
转到上一个(^ O-“ O”为旧位置)或下一个位置(^ I-“ I”,紧邻“ O”)。
执行搜索,编辑文件等时,可以前后浏览这些“跳转”。
按ma(m-标记,a-标记名称)。稍后返回到位置,输入`a。
:help jump-motions
如果有人需要更多信息,可能值得在答案中包含等。
按%
当光标在一个引号,括号,括号,括号或找其匹配。
直到[字符](t
)。这对于接受范围的任何命令都是有用的。我最喜欢的是ct;
或ct)
,它删除所有内容,直至尾随分号/右括号,然后将您置于插入模式。
另外,G
和gg
很有用(分别转到底部和顶部)。
f
代替t
,它将通过该角色继续动作。例如,将光标放在函数参数的开头,df,
将会删除它(当然是用合适的语言)。
键入行号,然后输入gg
将转到该行。
<number>go
转到<number>
文件中的第th个字符。
q <letter>-记录一个宏。
和
@ <相同字母>-播放。
这些是到目前为止Vim中最有用的命令,因为您可以让计算机为您完成很多工作,甚至不必编写程序或执行任何操作。
q
只是保存到一个名为缓冲区的缓冲区命令:简化的问题,但你使用它并不需要"
-例如,使用缓冲a
- "ad$
......
q
记录一个宏;宏可以包含命令,而不仅仅是文本,因此"ad$
与有所不同qa
。
qa
没有运行它;qa
记录并@a
运行它。确实可以用纯文本编写宏,将其存储在a
诸如中的寄存器中"ad$
,然后使用来执行@a
,但这要花很多时间。剪切和粘贴与记录和运行之间有根本的区别。
qx将开始记录击键。您几乎可以执行任何编辑任务,Vim会记住它。命中q再次,当你完成,然后按@x重播您的击键。这对于太复杂而无法编写映射的重复编辑非常有用。您可以使用x以外的其他字符来录制许多唱片。
我不得不说,我的最爱之一是将帮助窗口放到新标签中:
:tab help <help_topic>
这在新标签页中打开了帮助,对于喜欢Vim标签页的人来说,这非常有用。
:%s,/搜索,/替换,
您可以使用除/
(斜杠)以外的其他字符来分隔替换图案。这样,您不必逃避文件路径的斜线。
sed
有这个,但没有vim
。你知道的越多♒☆