是否可以从Vim自己的终端中导航到文件和行号?

ac1kyiln  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(61)

当我在Vim自己的终端中运行make命令时,我得到的结果中有一个文件名和一个数字,是否可以导航到该位置?

main.c:23:29: error: expected ';' after expression

字符串
在这种情况下,我想去上一行,并从那里,去该缓冲区和行号。

7dl7o3gd

7dl7o3gd1#

是的,我使用:make,而不是:terminal中的make,但你对我的措辞建议你做后者。
你应该澄清你所说的“导航”是什么意思。
假设 “在vim自己的终端中运行make命令” 的意思是,您已经在Vim会话中执行了:terminal,并且在 that shell中运行了make,那么您可以在那个Vim终端中运行vi main.c +23
请注意,这将是一个嵌套在原始会话中的Vim会话!
或者,您可以按Ctrl+w,然后:从终端窗口进入ex模式,然后输入e +23 main.c
这样,缓冲区将 * 取代 * 终端²。
至于
我想从上面的线路开始
对于短文件名,你最好快速输入。但是,否则,以最快的方式移动到那一行,然后只需y即可(类似于0y2t:,一旦你在该行上,复制main.c:23),然后执行Ctrl+ w-后跟-:thing,然后键入e,然后用Ctrl+r粘贴,后跟“,然后按Ctrl+ f查看使用Vim的全部功能编辑命令行的魔力。您需要将:更改为+,并将+23置于文件之前。名字,也许加上一个空格,最后按回车键。
(<$)在任何窗口中,你通常只需要从正常模式:开始,但在终端中,你通常处于插入模式,进入正常模式需要你按Ctrl+w,然后按Shift+n,只有这样你才能:;,所以你的速度比我描述的更快。
(²)好吧,不是真的,终端的缓冲区将被隐藏.并在窗口中,它占据了你的main.c将被显示.

rqenqsqc

rqenqsqc2#

粗略地说,内置的:terminal提供的shell有两种用法:一种是“非交互式”shell,用于运行单个命令;另一种是“交互式”shell,可以连续运行多个命令。
如果您正在执行类似于:terminal make的操作,则您处于第一种情况,并且命令(此处为make)预计会在某个点“完成”,并在最后打印最终的错误。
在此上下文中,命令在:terminal中“完成,”Vim返回到终端正常模式,在此模式下,所有常见的正常模式命令都适用。此时,您应该能够执行以下任何操作:

  • 在文件名上按gF以编辑当前窗口中给定行的文件名,
  • 在文件名上按<C-w>F,在新窗口中编辑给定行的文件名。

请参见:help gF:help ctrl-w_F:help 'switchbuf'
如果您正在执行类似:terminal的操作,然后是$ make,则您处于第二种情况,并且命令(此处为bash或其他命令)应保持“运行”,直到手动停止或因错误而停止。
在这个上下文中,命令在:terminal中“运行,”Vim停留在终端作业模式,并且通常拒绝放弃当前的终端缓冲区。
1.返回到具有<C-w>N正常模式,
1.在文件名上按<C-w>F,在新窗口中编辑给定行的文件名。
这里不能使用gF,因为这意味着放弃当前正在运行的shell,Vim会拒绝。
请参见:help terminal-mode
但无论如何,使用内置的快速修复功能通常更好:

  1. D0:make | cw
    1.浏览错误列表,
    1.打开给定行和列处的给定错误,
    1.毫不费力地转到下一个错误,
    1.等
    :help 30.1是对该功能的一个很好的介绍。这是用户手册第30章的第一节,如果你打算不时地使用Vim进行不仅仅是编辑/etc/hosts的操作,那么其中的前32章是阅读的。

相关问题