VIM:如何在Ubuntu上跳转到精确行

104

我在Ubuntu 12.10上使用vi。一些文件非常长,因此当我想要到达文件的中间位置时,必须向下翻页或滚动。

是否有VIM快捷键可以直接跳转到指定的行号?


1
@vim专家。这真的是Ubuntu-/bash-/Linux特定的吗(根据OP标签)?我不怎么使用vim,但对于我的用途,在Ubuntu/CentOS/Suse/Windows上我没有注意到任何差异。 - Alexander Malakhov
4个回答

165
:150

该命令将在vi中跳转到第150行

:1500

在vi中,以下命令可以跳转到第150行:

150G

相比于:150Enter这种方式,它需要的按键更少。 如果您不确定当前所在的行数,可以尝试使用该命令。

 :set nu!

注意冒号:

如果您希望始终查看该行,请考虑编辑您的vim配置文件。通常情况下

vi ~/.vimrc

并添加

:set nu! 

写入并退出

:wq
#or you could use :x

这可以在 vi 以外完成。例如,如果我想要删除文本文件中的第5000行,我可以使用脚本语言。例如,使用 sed,可以执行以下操作:

sed -i '5000d' filename
sed -i '5000d;' inputFile.txt

要删除第10行到第20行,可以使用以下命令:

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

请注意,使用-i选项将直接编辑该文件。如果不使用-i选项,则会输出到标准输出。您可以尝试将标准输出重定向到文件中。

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

这可能对你来说很棘手。它删除了第5001行到文件末尾的所有内容。">>"将附加到文件中,而">"则会创建一个新文件。

如果你好奇文件有多少行,可以键入wc -l inputFile.txt

这些东西可能看起来微不足道,但如果你要编辑有50,000行的文件,vi打开和遍历需要一些时间。如果你只想删除最后一行,你可以使用sed,在较短的时间内完成操作。

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

总的来说,你可能需要找一个好的vi教程。成千上万个教程都存在。我建议你咨询谷歌。也许你可以找到一个VIM速查表。


2
另外,在vim中,您可以键入:n50%并跳转到文件的中间。 - Eric Fortis
1
在正常模式下,150G:150 的效果相同。它并不更快,但可能更容易记住。 - romainl
@romainl 150gg也是一样的。这两种方法确实比:150<cr>更快。 - Randy Morris
@Randy Morris - 是的,它更快,我忘记考虑 <CR>。 - romainl
谢谢大家。我也在学习很多东西。我只用 VI 一年左右,每天似乎都能学到新的东西。 - matchew
显示剩余2条评论

18

其他vim技巧: 命令模式下

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

8

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

$ vi +N yourfile

其中N代表行号。

查看时(使用 moreless 命令):

$ less +N yourfile
$ more +N yourfile

符号+表示在启动时运行的命令。因此,如果命令只是一个数字,则vilessmore将跳转到该数字作为行号

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

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

7

请花几分钟阅读这篇文章,它将奖励您在编辑中特别是配置文件方面的效率。


链接已失效。 - Peter David Carter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接