当我在Vim自己的终端中运行make命令时,我得到的结果中有一个文件名和一个数字,是否可以导航到该位置?
make
main.c:23:29: error: expected ';' after expression
字符串在这种情况下,我想去上一行,并从那里,去该缓冲区和行号。
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将被显示.
:make
:terminal
vi main.c +23
e +23 main.c
y
0y2t:
main.c:23
e
:
+
+23
main.c
rqenqsqc2#
粗略地说,内置的:terminal提供的shell有两种用法:一种是“非交互式”shell,用于运行单个命令;另一种是“交互式”shell,可以连续运行多个命令。如果您正在执行类似于:terminal make的操作,则您处于第一种情况,并且命令(此处为make)预计会在某个点“完成”,并在最后打印最终的错误。在此上下文中,命令在:terminal中“完成,”Vim返回到终端正常模式,在此模式下,所有常见的正常模式命令都适用。此时,您应该能够执行以下任何操作:
:terminal make
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。但无论如何,使用内置的快速修复功能通常更好:
:help gF
:help ctrl-w_F
:help 'switchbuf'
$ make
bash
<C-w>N
:help terminal-mode
:make | cw
:help 30.1
/etc/hosts
2条答案
按热度按时间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
将被显示.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
。但无论如何,使用内置的快速修复功能通常更好:
:make | cw
,1.浏览错误列表,
1.打开给定行和列处的给定错误,
1.毫不费力地转到下一个错误,
1.等
:help 30.1
是对该功能的一个很好的介绍。这是用户手册第30章的第一节,如果你打算不时地使用Vim进行不仅仅是编辑/etc/hosts
的操作,那么其中的前32章是阅读的。