草庐IT

vim常用操作

yuanzicheng 2023-10-07 原文

vim是一款强大的命令行编辑器。

1.进入vim

指令 操作
vim file 打开或新建文件
vim +n file 打开文件,光标定位到第n行
vim + file 打开文件,光标定位到最后一行
vim +/PATTERN file 打开文件,光标定位到第一个被PATTERN匹配到的行的行首
vim -r file 恢复上次使用vim时崩溃的文件
vim file1 file2 ... 打开多个文件

2.vim工作模式

2.1 普通模式 Normal

打开vim编辑器模式进入命令模式,命令模式下可以进行光标移动、复制、剪切、删除、粘贴、撤销等一系列文本操作。

从其它模式切换到命令模式,可以使用ESC键。

2.1.1 光标移动
指令 操作
j、k、h、l 上、下、左、右
w、nw、W、nW 下1/n个单词词首(大写时忽略符号)
control+f 向前(下)翻页
control+b 向后(上)翻页
control+d 向前翻半页
control+u 向后翻半页
gg、G 前往第一行、最后一行
ngg、nG 前往第n行
H、M、L 前往屏幕可见范围内最高行、中间行、最低行
nH、nL 前往屏幕可见范围内第n行、倒数第n行
^、$、0 行首(不含空白)、行尾、行首(含空白)
zz、zt、zb 移动屏幕,使光标所在行处于中间、顶部、底部
fx、Fx 将光标移动至本行下一个/上一个x处
control+o 将光标移动到较旧的历史位置
control+i 将光标移动到较新的历史位置
2.1.2 删除、剪切、复制

x - 按字符删除/剪切
d - 按行删除/剪切

指令 操作
x、nx 剪切光标起始处的1个、n个字符
d$ 删除/剪切光标至行末
d^ 删除/剪切光标至行首(不包括行首空白 )
d0 删除/剪切光标至行首(包括行首空白)
dw 删除/剪切光标至词尾(包括空格)
de 删除/剪切光标至词尾(不包括空格)
db 删除/剪切光标至词首
dd 删除/剪切光标所在处的行
ndd 删除/剪切光标所处的行起始的共n行
c c指令 = d指令 + i(删除 + 进入INSERT模式)
y y指令类似d指令,只不过删除/剪切动作替换为复制
"ay、"by、"cy... 复制内容到a、b、c剪切板(缓冲区))
2.1.3 替换字符
指令 操作
r、nr 将光标所在处的1个、n个字符替换成下次键盘输入的字符
2.1.4 粘贴缓冲区的内容

p(小写):缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
P(大写):缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;
"ap/"aP、"bp/"bP、"cp/"cP...:从a、b、c...剪切板(缓冲区)粘贴内容;

2.1.5 缩进与格式化
指令 操作
>> 光标所在行向右缩进
<< 光标所在行向左缩进
VISUAL模式下,选取行,按= 格式化所选行,自动处理缩进
2.1.6 undo & redo
指令 操作
u、nu undo,撤销此前的1个、n个操作
U 撤销一行中的所有操作
control+r redo
2.1.7 重复执行
指令 操作
. 重复执行上一次操作

2.2 输入模式 Insert

从命令模式进入输入模式可以使用iaoIAO6个指令。

指令 操作
i insert,在光标所在处输入
a append,在光标所在处后方输入
o 在光标所在处的下方打开一个新行
I 在光标所在行的行首输入
A 在光标所在行的行尾输入
O 在光标所在处的上方打开一个新行

2.3 可视化模式 Visual

指令 操作
v 按字符选定
V VISUAL LINE 按行选定
Ctrl + v VISUAL BLOCK 按列选定
  • 进入VISUAL模式后,可以结合命令模式下的光标移动操作选定内容;
  • 选定内容后,可以再使用d(删除)、c(删除并进入INSERT模式)、y(复制)等指令。

2.4 命令模式 Command

末行模式提供了VIM内建的命令行接口,可以对文本进行查找、替换,设置vim编辑环境,保存和退出文件。

2.4.1 退出vim
指令 操作
:q 直接退出
:q! 强制退出
:wq 保存并退出
:wq! 强制保存并退出
2.4.2 末行命令限定
  • 末行命令限定即在限定命令在指定的行执行,也可以单独使用来移动光标。
指令 操作
:n 特定的第n行,例如:5即第5行
:. 当前行
:$ 最后一行
:m,n 从第m行到第n行
:% 全文,同:1,$
:/pattern/ 从光标所在处起始向文件尾部第一次被模式所匹配到的行
:/pat1/,/pat2/ 从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行
2.4.3 查找
  • 查找到匹配结果后,可以使用n将光标移到下一个匹配项,N移到上一个匹配项
指令 操作
/PATTERN 从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串
?PATTERN 从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串
:/str 正向搜索,将光标移动到下方第一个包含str的行
:?str 反向搜索,将光标移动到上方第一个包含str的行
2.4.4 替换 s
  • 命令后选项:g 单行内所有匹配项、 i 忽略大小写、c 确认是否替换
  • 关键词 old 替换为 new
  • 分隔符/可以换成其它非常用字符,如@#等
指令 操作
:s/old/new 将光标所在行第一个 old 替换为 new
:s/old/new/g 将光标所在行所有 old 替换为 new
:%s/old/new/gc 全文执行替换,询问是否替换
:3,10s/old/new/gic 将第3行到第10行内容替换,忽略大小写,且每个询问是否替换
2.4.5 获取帮助
指令 操作
:help 查看帮助全文
:help subject 查看特定帮助
2.4.6 其它操作
指令 操作
:noh 取消高亮
2.4.7 执行shell命令
指令 操作
:!commond 末行模式下还可以不退出vim
2.4.8 设置vim工作特性
  • 在末行模式下的设定,仅对当前vim进程有效;如果希望永久有效,可以修改/etc/vimrc(全局)、~/.vimrc(个人)。
指令 操作
:set number, set nu 显示行号
:set nomber, set nonu 隐藏行号
:set ai 启用自动缩进
:set noai 禁用自动缩进
:set hlsearch 启用搜索高亮
:set nohlsearch 禁用搜索高亮
:syntax on 启用语法高亮
:syntax off 禁用语法高亮
:set ic 启用忽略字符大小写
:set noic 禁用忽略字符大小写

3.多文件操作

vim FILE1 FILE2 ...

在文件间切换:

:next  下一个
:prev  上一个
:first   第一个 
:last   最后一个 

退出所有文件:

:wqall 保存所有文件并退出;
:wall  保存所有文件
:qall  退出所有文件

4.多窗口操作

vim除了可以同时编辑多个文件,还可以以多个窗口打开文件

指令 操作
vim -o file1 file2 file3 ... 横向分隔窗口打开多个文件
vim -O file1 file2 file3 ... 纵向分隔窗口打开多个文件
vim -p file1 file2 file3 ... 以tab标签页的方式打开多个文件
:e file 在vim窗口中打开新的文件
:new file 纵向分割窗口并打开新文件,不指定文件时打开空白文件
:vnew file 横向分割窗口并打开新文件,不指定文件时打开空白文件
:tabe、:tabnew 在新的tab页打开文件
gt、gT 在tab页之间进行切换
control+w, w/h/j/k/l 在分割的窗口切换
control+w, s/v 将当前窗口的文件分割显示

vim自带的练习教程:vimtutor

有关vim常用操作的更多相关文章

  1. ruby-on-rails - Rails 常用字符串(用于通知和错误信息等) - 2

    大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje

  2. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  3. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  4. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  5. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  6. ruby - 从 Rakefile 打开 Vim? - 2

    我正在为个人笔记创建一个日志应用程序,并且在我的Rakefile中包含以下内容:task:newdoentry_name="Entries/#{Time.now.to_s.gsub(/[-\:]+/,'.').gsub(/.0500+/,'')}.md"`touch#{entry_name}``echo"#$(date)">>#{entry_name}`end我想包括的最后一部分是Vim文本编辑器的打开,但我不知道如何打开它,就像我直接从bash终端调用它一样。我试过:vim#{entry_name}但不幸的是,我认为它们都将其作为后台进程打开。我一直在引用“6WaystoRunShe

  7. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  8. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  9. ruby-on-rails - Textmate 'Go to symbol' 相当于 Vim - 2

    在Railcasts上,我注意到一个非常有趣的功能“转到符号”窗口。它像Command-T一样工作,但显示当前文件中可用的类和方法。如何在vim中获取它? 最佳答案 尝试:helptags有各种程序和脚本可以生成标记文件。此外,标记文件格式非常简单,因此很容易将sed(1)或类似的脚本组合在一起,无论您使用何种语言,它们都可以生成标记文件。轻松获取标记文件(除了下载生成器之外)的关键在于格式化样式而不是实际解析语法。 关于ruby-on-rails-Textmate'Gotosymbol

  10. 电脑怎么截图?进来看(8种常用截图方法) - 2

    电脑上可以截取图片吗?如果可以,该如何操作呢?相信很多小伙伴都只知道一两种截图的方式,知道的并不全面。其实,电脑上有多种方式截图的,而且非常方便。电脑怎么截图?今天我们就来教大家如何使用电脑截取图片的8种常用方式!操作环境:演示机型:Delloptiplex7050系统版本:Windows10方法一:系统自带截图具体操作:同时按下电脑的自带截图键【Windows+shift+S】,可以选择其中一种方式来截取图片:截屏有矩形截屏、任意形状截屏、窗口截屏和全屏截图。 方法二:QQ截图具体操作:在电脑登录QQ,然后同时按下【Ctrl+Alt+A】,可以任意截图你需要的界面,可以把截图的页面直接下载,

随机推荐