VIM:如何在 Ubuntu 上精确到行

Posted

技术标签:

【中文标题】VIM:如何在 Ubuntu 上精确到行【英文标题】:VIM: how to go to exact line on Ubuntu 【发布时间】:2011-09-16 20:40:46 【问题描述】:

我在 Ubuntu 12.10 上使用 vi。有些文件很长,所以当我想转到文件中间时,我必须向下翻页或向下滚动。

是否有 VIM 快捷方式可以转到确切的行号?

【问题讨论】:

@vim 专家。这真的是 Ubuntu-/bash-/Linux 特定的(根据 OP 标签)吗?我使用 vim 的次数不多,但就我的使用而言,我没有注意到 Ubuntu/CentOS/Suse/Windows 之间的细微差别。 【参考方案1】:

从打开的终端,在 bash shell 中,只需运行以下命令编辑您的文件:

$ vi +N yourfile

N 是行号。

供查看(moreless;):

$ less +N yourfile
$ more +N yourfile

符号+ 表示在开始时运行的命令。因此,如果command 只是一个数字,那么vilessmore 将作为行号 跳转到这里。

但您也可以使用/regex 来查找特定字符串或正则表达式的第一次出现:

$ less +/Error logfile
$ less -i +/error logfile      # -i Causes less's searches to ignore case
$ vi +/open.*myfile myprog...

【讨论】:

【参考方案2】:

花几分钟时间开始阅读this 文档。从长远来看,它会奖励您编辑特别是配置文件的效率。

【讨论】:

链接已失效【参考方案3】:
:150

将带你到 vi 中的第 150 行

:1500

将带你到 vi 中的第 1500 行

根据 cmets 你可能想尝试

150G

到第 150 行。 那是更少的击键次数 :150回车 如果你不确定你在哪条线路上试试

 :set nu!

注意:

如果您想始终看到该行,请考虑编辑您的 vim 配置文件。大多数时候

vi ~/.vimrc

并添加

:set nu! 

然后写退出

:wq
#or you could use :x

这可以在 vi 之外完成。例如,如果我想删除文本文件中的第 5000 行,我可以使用脚本语言。例如,使用 sed 它将是以下内容

sed -i '5000d;' inputFile.txt

删除第 10 到 20 行是

sed -i '10,20d;' inputFile.txt

注意 -i 将在原地编辑文件。没有 -i 它将转到标准输出。试试吧。您可以将标准输出重定向到文件

sed '5001,$d;' inputFile.txt >> appenedFile.txt

这对你来说可能有很多事情要做。这会将第 5001 行删除到 $。 $ 是文件的结尾。 >> 将附加到文件中。其中 as > 创建一个新文件。

如果您想知道一个文件中有多少行,您可以输入wc -l inputFile.txt

其中一些可能看起来非常微不足道,但如果您尝试编辑包含 50,000 行的文件,则可能需要 vi 花费一分钟的时间来打开和遍历。如果您知道只想删除最后一行,则可以使用 sed 并在很短的时间内完成。

sed 也可以在文件中搜索和替换。但也许 awk、perl 或 python 也可能是一个可行的解决方案。

但总的来说,您可能希望找到关于 vi 的好教程。数以千计的存在。我会咨询谷歌。或许给自己找一个 VIM 作弊工具。

【讨论】:

没问题,我稍微扩展了我的答案。祝你好运 另外,在 vim 中你可以输入:n50% 并进入文件中间。 在正常模式下,150G 的作用与:150 相同。它不是更快,但可能更容易记住。 @romainl 150gg 也是如此。两者确实都比 :150@Randy Morris - 是的,它更快,我忘了考虑<CR>【参考方案4】:

其他 vim 提示:在命令模式下

H 转到屏幕顶部 M 走到屏幕中间 L 转到屏幕底部 gg转到第一行 G 转到最后一行

【讨论】:

以上是关于VIM:如何在 Ubuntu 上精确到行的主要内容,如果未能解决你的问题,请参考以下文章

ubuntu上如何简单快捷地安装spf13-vim?

ubuntu上如何简单快捷地安装spf13-vim?

vim中,将光标移至第60行,并且删除行尾的15个字符,如何执行命令?

linux中的vim 编辑一行内容,如何使光标快速移动到行首和行尾以及行中间某处啊?

linux中的vim 编辑一行内容,如何使光标快速移动到行首和行尾以及行中间某处啊

vi/vim