草庐IT

vim命令大全

万山寒 2023-04-14 原文

vim命令大全

1.vim介绍

vim编辑器有三种模式:

命令模式、编辑模式、末行模式

模式间切换方法
(1)命令模式下,输入:后,进入末行模式
(2)末行模式下,按esc慢退、按两次esc快退、或者删除所有命令,可以回到命令模式
(3)命令模式下,按下ia等键,可以计入编辑模式
(4)编辑模式下,按下esc,可以回到命令模式

vim打开文件

Vi 使用的选项说 明
vim filename打开或新建一个文件,并将光标置于第一行的首部
vim -r filename恢复上次 vim 打开时崩溃的文件
vim -R filename把指定的文件以只读方式放入 Vim 编辑器中
vim + filename打开文件,并将光标置于最后一行的首部
vi +n filename打开文件,并将光标置于第 n 行的首部
vi +/pattern filename打幵文件,并将光标置于第一个与 pattern 匹配的位置
vi -c command filename在对文件进行编辑前,先执行指定的命令

2.命令模式

1.光标移动

快捷键功能描述
jkhl基本上下左右
gg光标移动到文档首行
G光标移动到文档尾行
^或_光标移动到行首第一个非空字符
home键或0或者g0光标移动到行首第一个字符
g_光标移动到行尾最后一个非空字符
end或 或者 g 或者g 或者g光标移动到行尾最后一个字符
gm光标移动到当前行中间处
b/B光标向前移动一个单词(大写忽略/-等等特殊字符)
w/W光标向后移动一个单词(大写忽略/-等等特殊字符)
e/E移到单词结尾(大写忽略/-等等特殊字符)
ctrl+b或pageUp键翻屏操作,向上翻
ctrl+f或pageDn键翻屏操作,向下翻
数字+G快速将光标移动到指定行
`.移动到上次编辑处
数字+上下方向键以当前光标为准,向上/下移动n行
数字+左右方向键以当前光标为准,向左/右移动n个字符
H移动到屏幕顶部
M移动到屏幕中间
L移动到屏幕尾部
z+Enter键当前行在屏幕顶部
z+ .当前行在屏幕中间
z+ -当前行在屏幕底部
shift+6光标移动到行首
shift+4光标移动到行尾
-移动到上一行第一个非空字符
+移动到下一行第一个非空字符
)向前移动一个句子
(向后移动一个句子
}向前移动一个段落
{向前移动一个段落
count l移动到count 列
counth向左移动count 字符
countl向右移动count字符
countgo移动到count字符

2.选中内容

快捷键功能描述
v进行字符选中
V 或shift+v进行行选中
gv选中上一次选择的内容
o光标移动到选中内容另一处结尾
O光标移动到选中内容另一处角落
ctr + V进行块选中

3.复制(配合粘贴命令p使用)

快捷键功能描述
y复制已选中的文本到剪贴板
n+yy复制光标所在行,此命令前可以加数字 n,可复制多行
yw复制光标位置的单词
ctrl+v + 方向键+yyctrl+v,并按方向键选中区块,按下yy复制

4.剪切

快捷键功能描述
dd剪切光标所在行
数字+dd以光标所在行为准(包含当前行),向下剪切指定行数
D剪切光标所在行

5.粘贴

快捷键功能描述
p将剪贴板中的内容粘贴到光标后
P(大写)将剪贴板中的内容粘贴到光标前

6.删除

快捷键功能描述
x删除光标所在位置的字符
X(大写)删除光标前一个字符
dd删除光标所在行,删除之后,下一行上移
D删除光标位置到行尾的内容,删除之后,下一行不上移
ndd删除当前行(包括此行)后 n 行文本
dw移动光标到单词的开头以删除该单词
dG删除光标所在行一直到文件末尾的所有内容
:a1,a2d删除从 a1 行到 a2 行的文本内容

7.撤销/恢复

快捷键功能描述
u撤销
ctrl+r恢复
U(大写)撤销所有编辑

8.字符转换

快捷键功能描述
~转换大小写
u变成小写
U变成大写

9.编辑命令的快捷键

快捷键功能描述
↑或ctr + p上一条命令
↓或ctr + n下一条命令
ctr + b移动到命令行开头
ctr + e移动到命令行结尾
ctr + ←向左一个单词
ctr + →向右一个单词

3.末行模式(: xxx命令)

1.保存/退出文件操作

命令功能描述
:wq保存并退出 Vim 编辑器
:wq!保存并强制退出 Vim 编辑器
:q不保存就退出 Vim 编辑器
:q!不保存,且强制退出 Vim 编辑器
:w保存但是不退出 Vim 编辑器
:w!强制保存文本
:w filename另存到 filename 文件
x!保存文本,并退出 Vim 编辑器
ZZ直接退出 Vim 编辑器

2.查找:“/关键词”

在查找结果中,用Nn可以切换上下结果;输入nohl,可以取消高亮

快捷键功能描述
/abc从光标所在位置向前查找字符串 abc
/^abc查找以 abc 为行首的行
/abc$查找以 abc 为行尾的行
?abc从光标所在位置向后查找字符串 abc
n或;向同一方向重复上次的查找指令
N或,向相反方向重复上次的查找指定

3.替换

快捷键功能描述
r替换光标所在位置的字符
R从光标所在位置开始替换字符,其输入内容会覆盖掉后面等长的文本内容,按“Esc”可以结束
:s/a1/a2 替换当前光标所在行第一处符合条件的内容
:s/a1/a2/g替换当前光标所在行所有的 a1 都用 a2 替换
:%s/a1/a2替换所有行中,第一处符合条件的内容
:%s/a1/a2/g替换所有行中,所有符合条件的内容
:n1,n2 s/a1/a2将文件中 n1 到 n2 行第一处 a1 都用 a2 替换
:n1,n2 s/a1/a2/g将文件中 n1 到 n2 行所有 a1 都用 a2 替换

4.行号显示:“: set nu”;

  1. 行号显示:set nu
  2. 取消行号显示::set nonu

5.文件切换

使用vim打开多个文件后,在末行模式下可以进行切换。

  1. 查看当前已经打开的所有文件::files(%a表示激活状态,#表示上一个打开的文件)
  2. 切换到指定文件::open 文件名
  3. 切换到上一个文(back previous)::bp
  4. 切换到下一个文件(back next)::bn

4.编辑模式

快捷键功能描述
i在当前光标所在位置插入,光标后的文本相应向右移动
I光标所在行的行首插入,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令
o光标所在行的下插入新的一行。光标停在空行首,等待输入文本
O(大写)光标所在行的上插入新的一行。光标停在空行的行首,等待输入文本
a在当前光标所在位置之后插入
A光标所在行的行尾插入,相当于光标移动到行尾再执行 a 命令
esc键退出编辑模式

5.扩展

1.代码颜色显示:“:syntax on/off”

2.vim内置计算器
a.进入编辑模式
b.按“ctrl+r,光标变成引号,,输入=,光标转到最后一行
c.输入需要计算的内容,按下enter后,计算结果回替代上一步中的引号,光标恢复

3.vim的配置
a.文件打开时,末行模式下输入的配置为临时配置,关闭文件后配置无效
b.修改个人配置文件,可以永久保存个人配置(~/.vimrc,如果没有可以自行创建)
c.修改全局配置文件,对每个用户生效(vim自带,/etc/vimrc)

注:个人配置文件优先级更高,当个人配置和全局配置发生冲突时,系统以当前用户的个人配置文件为准

4.异常退出
在编辑文件后,未正常保存退出时,会产生异常退出交换文件(.原文件名.swp)
将交换文件删除后,再次打开文件时,无提示:“#rm -f .原文件名.swp”

5.别名机制:自定义指令
Linux中,存在一个别名映射文件: ~/.bashrc
修改文件内容,可以自定义指令,重新登录账号后生效

6.文件快捷方式
对于深层文件,可以创建文件快捷方式,便于后续操作:#ln -s 源路径 新路径
7. 退出方式
(1)在vim中退出文件编辑模式,可以使用:q或者:wq
(2)建议使用:x:使用效果等同于wq,如果文件有改动则先保存后退出;但是如果文件没有做修改,会直接退出,不会修改文件更新时间,避免用户混淆文件的修改时间

有关vim命令大全的更多相关文章

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

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

  2. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  3. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  4. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  5. ruby - 从 Ruby : capturing the output while displaying the output? 运行 shell 命令 - 2

    我有一个问题。我想从另一个ruby​​脚本运行一个ruby​​脚本并捕获它的输出信息,同时让它也输出到屏幕。亚军#!/usr/bin/envrubyprint"Enteryourpassword:"password=gets.chompputs"Hereisyourpassword:#{password}"我运行的脚本文件:开始.rboutput=`runner`putsoutput.match(/Hereisyour(password:.*)/).captures[0].to_s正如您在此处看到的那样,存在问题。在start.rb的第一行,屏幕是空的。我在运行程序中看不到“输入您的密

  6. ruby - 是否有将图像文件转换为 ASCII 艺术的命令行程序或库? - 2

    有这样的事吗?我想在Ruby程序中使用它。 最佳答案 试试这个http://csl.sublevel3.org/jp2a/此外,Imagemagick可能还有一些东西 关于ruby-是否有将图像文件转换为ASCII艺术的命令行程序或库?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/6510445/

  7. 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

  8. ruby - 在 Ruby 的 if 语句中检查 bash 命令 - 2

    如何在Ruby的if语句中检查bash命令的返回值(true/false)。我想要这样的东西,if("/usr/bin/fswscell>/dev/null2>&1")has_afs="true"elsehas_afs="false"end它会提示以下错误含义,它总是返回true。(irb):5:warning:stringliteralincondition正确的语法是什么?更新:/usr/bin/fswscell寻找afs安装和运行状态。它会抛出这样的字符串,Thisworkstationbelongstocell如果afs没有运行,命令以状态1退出 最

  9. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  10. ruby - Capistrano 中的执行、测试和捕获命令有什么区别? - 2

    关于SSHkit-Github它说:Allbackendssupporttheexecute(*args),test(*args)&capture(*args)来自SSHkit-Rubydoc,我明白execute实际上是test的别名?test之间有什么区别?,execute,capture在Capistrano/SSHKit中我应该什么时候使用? 最佳答案 执行只是执行命令。使用非0退出引发错误。测试方法的行为与execute完全相同,但是它返回bool值(true如果命令以0退出,而false否则)。它通常用于控制任务中的流程

随机推荐