vi命令行,转到行和列


17

很长时间以来,我一直在混合使用emacsvivim)。他们每个人都有其优势。我解析像过程这样的编译的错误输出并获得行号和列号,但是我只能emacs用来直接进入行号和列号:

emacs +15:25 myfile.xml

vi我只有行号(根据手册页)

vi +15 myfile.xml

有一个选项可以将光标移到模式(vi +/pattern myfile.xml)上,而我从未使用过。但这对我没有帮助,因为模式并非始终是文件中的第一个匹配项。

我怎样才能开始vi进入文件第15行的第25列?我可以在-c选项上做些什么吗?


3
既然你标记VIM,你有没有考虑的quickfix系统,该系统运行编译VIM内,解析错误输出,填充错误(带导航的列表:cp:cn:cl命令),并在第一个位置的光标?
Random832 2014年

如果您在vi中打开文件,然后键入:15,它将跳到第15行。希望这对您有所帮助
代码ninja 2014年

Answers:


17

您可以使用:

vi '+normal 15G25|'  myfile.xml

2
说明:vi中的大多数命令(即,大多数字母)都可以在数字(或范围)之后更改其默认行为或重复其默认行为(或将其应用于特定范围)。在vi的内部,在命令模式下,您可以15G转到第15行并25|转到第25行。Christa演示了如何从命令行执行此操作。
Olivier Dulac 2014年



4

我不知道该-c选项,但是您应该可以:

vi '+cal cursor(15,25)' myfile.xml

(确保您引用的是括号()


cursor()该列使用字节索引,但通常是字符计数。
Ingo Karkat 2014年

@IngoKarkat真的重要吗?文字为UTF-8。
多米尼克2014年

2
对于非ASCII字符(由多个字节表示)很重要。此外,一个制表符和控制字符通常会占据多个显示列。
Ingo Karkat 2014年

2

值得注意:

-c command 

启动时运行给定的ex命令。vi仅允许使用-c选项;Vim最多接受10个。此选项的旧格式,+command仍受支持。

使用时+command具有相同的单一ex command限制vi

+/pattern也仅限于用一个命令vi

(摘自vim和前编辑


1

您可以将以下代码添加到vimrc中,当返回文件时,vim自动返回到旧位置:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.