我习惯了Emacs,但我正在尝试Vim,看看我更喜欢哪一个。
我喜欢Emacs的一件事是能够在Emacs中运行终端。这可能在Vim内部吗?我知道您可以从Vim执行命令,但我希望能够在选项卡内运行终端。
答案 0 :(得分:231)
2011年8月过时
结帐Conque Shell(也在GitHub上)。允许您在vim中运行任何交互式程序,而不仅仅是shell。
答案 1 :(得分:183)
我不确定你想要实现的目标(我从未使用过Emacs),但你可以输入以下命令在Vim中运行命令:
:! somecommand [ENTER]
如果你想输入几个命令,或者在shell中玩一段时间,你可以随时使用:
:! bash (or your favourite shell) [ENTER]
命令或shell终止后,您将可以选择按 Enter 返回编辑器窗口
Vim是故意轻量级的,缺乏执行非编辑类型的功能,就像在Vim窗格/选项卡中运行一个完整的shell一样,但如上所述,有第三方插件,如vim-shell允许你做那种事情。
通常如果我想在Vim和我的shell(Bash)之间切换,我只需按 CTRL + Z 暂停Vim进程,在我的shell中玩,然后当我想回到Vim时键入'fg' - 保持我的编辑器和我的shell很好并且分开。
答案 2 :(得分:123)
我解决这个问题的方法是:
fg
即可返回到Vim离开的位置。答案 3 :(得分:114)
我肯定会推荐screen
这样的事情。 Vim是一个文本编辑器,而不是shell。
我会使用 Ctrl + A S 水平拆分当前窗口,或者在Ubuntu的屏幕和其他修补版本中,你可以使用 Ctrl + A < / kbd> | (管道)垂直分割。然后使用 Ctrl + A Tab (或等效于某些系统, Ctrl + A Ctrl + I 可能是更容易键入)在窗口之间切换。还有其他命令可以更改窗口的大小和排列。
或者screen
的不太高级的用法只是打开多个全屏窗口并在它们之间切换。这是我通常做的,我偶尔只使用分屏功能。
GNU Screen Survival Guide问题如果你不熟悉它,可以提供一些很好的提示。
答案 4 :(得分:79)
:sh
然后ctrl+d
返回(bash)
<强>更新强>:
您可以在vim中映射ctrl+d
以运行:sh
,这样您就可以快速切换bash和vim。
noremap <C-d> :sh<cr>
答案 5 :(得分:69)
如果在您的Vim版本中启用,则可以使用:echo has('terminal')
命令启动终端。
终端窗口支持已添加到Vim 8.这是一个可选功能,可以在使用+终端功能编译Vim时启用。如果您的Vim版本具有终端支持,:term
将输出&#34; 1&#34;。
输入Ctrl-W N
会将您置于 Terminal-Job 模式,您可以按预期使用终端。
在终端作业模式下,按Ctrl-\ Ctrl-N
或i
可将模式切换为终端正常,从而可以移动光标以及与Vim的 Normal 模式类似的命令。要切换回终端作业模式,请按scale(1,-1)
。
其他答案提到了Neovim中的类似功能。
答案 6 :(得分:30)
这个问题相当陈旧,但对于那些发现它的人来说,有一个新的可能解决方案:Neovim包含一个完整的,一流的终端模拟器,它完全符合ConqueTerm所尝试的目标。只需运行:term <your command here>
即可。
<C-\><C-n>
将退出术语模式回到正常模式。如果你喜欢我并且喜欢逃脱仍然退出术语模式,你可以将它添加到你的nvimrc:
tnoremap <ESC><ESC> <C-\><C-N>
然后按ESC 两次将退出终端模式回到正常模式,这样你就可以操作仍在运行的命令写入的缓冲区。
虽然请记住,由于nvim在我发布此答案的时候正处于重大发展阶段,因此可能会添加另一种退出终端模式的方法。当 Ctrl + \ Ctrl + n 从几乎任何模式切换到正常模式时,我不希望这个答案会出错,但要注意,如果它不起作用,这个答案可能已经过时了。
答案 7 :(得分:27)
最终2017年在vim中添加了一个本地:terminal
命令。
以下摘自:terminal自述文件:
此功能用于在Vim窗口中运行终端仿真程序。一个 作业可以开始连接到终端仿真器。例如,到 运行shell:
:term bash
或者运行build命令:
:term make myprogram
作业从Vim异步运行,窗口将更新为 显示作业的输出,同时在另一个窗口中进行编辑。
答案 8 :(得分:21)
:term
此功能是在Vim 8.1中新添加的,但是,该帖子刚刚发布,因此您可能需要更新才能使用它。
答案 9 :(得分:17)
我知道我没有直接回答这个问题,但我认为这是一个问题 好方法。没有人提到过tmux(或者至少没有提到过 独立答案)。 Tmux是一种像屏幕一样的终端多路复用器。最 可以在两个多路复用器中制作东西,但是afaik tmux更容易 配置。此外,tmux现在正在积极发展 屏幕周围有一个很大的生态系统,就像有用的工具一样 配置,ecc。
同样对于vim,还有另一个插件:ViMUX,它有很多帮助 两种工具之间的相互作用。您可以使用以下命令调用命令:
:call VimuxRunCommand("ls")
该命令在当前窗格vim下创建一个小的水平分割 是在。
它还可以让您从提示符运行,以防您不想运行 整个命令:
<Leader>vp :VimuxPromptCommand<CR>
由于没有实现,至少有6个'平台特定插件':
g:vroom_use_vimux
这是一个很好的“用例”:Tests on demand using Vimux and Turbux with Spork and Guard
答案 10 :(得分:13)
有人已提出https://github.com/Shougo/vimshell.vim,但他们没有提到原因。因此,当我离开这个问题时,我浪费了很多其他时间尝试其他(排名更高)的选项。
Shougo/vimshell就是答案。原因如下:
除了作为终端模拟器之外,VimShell还允许您以正常和可视模式浏览终端输出。因此,如果您运行的命令导致您只想使用键盘复制和粘贴输出... VimShell涵盖了这一点。
提到的其他选项都没有,包括NeoVim中的:terminal命令。 Neovim's:终端接近,但截至2017年2月18日 至少以下方式不足:
将光标移动到缓冲区的末尾,而不是像VimShell那样将光标移动到同一位置。浪费大量时间。
不支持modifiable = 1
查看a discussion on this at Github,因此无法使用vim-easymotion等有用的插件。
不支持像Vimshell那样显示行号。
不要在其他选项上浪费时间,包括Neovim的:终端。使用VimShell。
答案 11 :(得分:9)
您可能需要查看:sh
命令(请参阅Vim中的:help sh
)。
答案 12 :(得分:7)
答案 13 :(得分:4)
我所知道的只是使用vim-shell,第三方补丁。
答案 14 :(得分:3)
我现在用这个,你可以试试。 VimShell
答案 15 :(得分:3)
到目前为止,我已经尝试了很多这里提到的解决方案,我真正想要的是保持终端打开,同时在 VsCode
中编写类似的体验。然后我遇到了这个对我来说非常适合的解决方案。
Nvim 0.5
,但我认为它适用于任何版本并且也在 vim
上进行了检查myQuickTerminal.vim
或任何您想要的名称创建脚本。"==============================================================================
"
" ▒█▀▀█ █░░█ ░▀░ █▀▀ █░█ ▀▀█▀▀ █▀▀ █▀▀█ █▀▄▀█ ░▀░ █▀▀▄ █▀▀█ █░░
" ▒█░▒█ █░░█ ▀█▀ █░░ █▀▄ ░▒█░░ █▀▀ █▄▄▀ █░▀░█ ▀█▀ █░░█ █▄▄█ █░░
" ░▀▀█▄ ░▀▀▀ ▀▀▀ ▀▀▀ ▀░▀ ░▒█░░ ▀▀▀ ▀░▀▀ ▀░░░▀ ▀▀▀ ▀░░▀ ▀░░▀ ▀▀▀
"
"==============================================================================
" " This is a script that will trigger a terminal quickly than the FloatTerminal
" open new split panes to right and below
"link: https://betterprogramming.pub/setting-up-neovim-for-web-development-in-2020-d800de3efacd
"==============================================================================
set splitright
set splitbelow
" turn terminal to normal mode with escape
tnoremap <Esc> <C-\><C-n>
" start terminal in insert mode
au BufEnter * if &buftype == 'terminal' | :startinsert | endif
" open terminal on ctrl+n
function! OpenTerminal()
split term://zsh
resize 10
endfunction
nnoremap <leader> n :call OpenTerminal()<CR>
注意:如果您出于特定原因想运行 bash 而不是 zsh,请将 zsh
替换为 bash
。
让我们来获取它,把它放在 init.vim
中用于 neovim 或 `.vimrc' 中用于 vim
source $HOME/.config/nvim/modules/mySpecialScripts/myQuickTerminal.vim
这将在您保存和资源化时预先加载,您可以使用 source $MYVIMRC
快速重新加载 init.vim 文件。
如您在脚本 n 中看到的那样映射以在新窗格中打开终端,我的是(空格键),一旦我单击(空格 + n),将触发一个终端,我将享受编写代码的乐趣终端打开时。
" Better window navigation
nnoremap <C-h> <C-w>h
nnoremap <C-j> <C-w>j
nnoremap <C-k> <C-w>k
nnoremap <C-l> <C-w>l
如果您希望终端使用键退出当前缓冲区。你可以使用
tnoremap <Esc> <C-\><C-n>:q!<CR>
但是由于我想在不关闭终端的情况下在使用的多个缓冲区之间切换,我改为使用:
tnoremap <Leader><Esc> <C-\><C-n>:q!<CR>
答案 16 :(得分:2)
试试vterm,这是vim中一个非常全功能的shell。它的历史和功能清晰,但仍在开发中,但它仍然很不错
答案 17 :(得分:2)
假设您的vim版本首先支持+term
命令,请将vim的shell设置为在一个命令(例如set=/usr/bin/zsh
)中使用,然后运行命令+term
(例如{{1 }}。您可能需要对窗口进行一些其他操作(即删除其中一个窗口并旋转窗口),但是您将拥有终端。
答案 18 :(得分:2)
如果您对快速回答感兴趣,这里是::vert term。它将垂直拆分您的屏幕并打开终端。
答案 19 :(得分:0)
Vim 8.1的主要新功能是支持在Vim窗口中运行终端。
const db = admin.firestore()
将在Vim内的另一个窗口中打开终端。
答案 20 :(得分:0)
我承认我并没有严格回答您的问题,但是在同一窗口中使用Vim和Terminals时,对我来说更好的方法是Tmux(类似于屏幕,类似于“在后台运行”) ,尽管此选项在拆分和制表符下效果更好)。
这篇文章将帮助您了解它们如何协同工作:'Tmux and Vim — even better together'。
通过这种方式,我们可以将Vim转换为功能强大的IDE
答案 21 :(得分:0)
拆分屏幕并运行命令term ++curwin
,以在Vim缓冲区内运行终端。以下命令可以同时为我工作:
:bo 10sp | term ++curwin
答案 22 :(得分:0)
正如@fjardon 所说,自 2017 年以来,可以在 vim 中使用终端打开一个新选项卡:
只需输入::terminal
。默认情况下,它会在当前标签上方打开一个标签。
如果您希望它在其他地方打开,您可以尝试以下选项:
:below terminal
: 打开当前标签下的终端。:below vertical terminal
:始终垂直向右打开终端。您可以玩这些,直到找到您喜欢的为止。在此之后,您可以在 .vimrc
配置文件中设置地图,对我来说,我使用:
nmap <leader>tt :below vertical terminal<CR>
这样我就可以输入 <space>tt
(空格键)来快速打开它。
附注:
i
或 a
。干杯!