【问题标题】:Vim Question Regarding Views关于视图的 Vim 问题
【发布时间】:2010-10-18 13:55:59
【问题描述】:

我在这里阅读了很多关于 vim 的问题。我找不到我想用 vim 做的事情,但我确信这是可能的。

我喜欢使用标签的 vim(我还是个新手),我已经调整了我的 vimrc,以便 H & L 键让我在标签之间来回切换。

我希望找到一种能够使用选项卡命令打开选项卡作为输出的方法,这样如果我在我的案例 Ruby 中编写一些东西并且我想测试它,我可以运行它并翻转到带有输出的新选项卡。或者将选项卡翻转到交互式控制台以测试代码。这可能吗?

顺便说一句,是否可以将选项卡扩展到视图,所以如果我打开两个选项卡说脚本和输出,我可以 :spx 或类似的选项卡进入分屏。

【问题讨论】:

    标签: ruby vim console views


    【解决方案1】:

    您可以通过多种方式将 ruby​​ 输出加载到 vim 窗口中。一种方法是打开一个新的拆分窗口,然后加载命令输出:

    " vimscript command to open new split window
    wincmd n
    " run ruby command and insert output at line 1
    1,1!ruby foo.rb
    

    或者,您可以使用单个窗口在新选项卡上查看输出:

    tabnew
    1,1!ruby foo.rb
    

    【讨论】:

    • 我对 1,1!ruby foo.rb 格式有疑问。我有一个简单的 ruby​​ 程序,我正在使用 name.rb 对其进行测试。 name.rb 从命令行运行良好。提出“你的名字是什么?” fname = gets.chomp puts '你的中间名是什么? mname = gets.chomp puts '你姓什么? sname = gets.chomp numnames = fname.length.to_i + mname.length.to_i + sname.length.to_i puts '你知道你的名字有 ' + numnames.to_s + ' 字符' sleep(30) 但是如果我将其运行为 :1,1!ruby.rb name.rb
    • 我在 vim name.rb:2:in <main>': undefined method chomp' for nil:NilClass (NoMethodError) 中收到此错误,你的名字是什么?
    【解决方案2】:

    我知道这不是您想要的答案,但请使用缓冲区并放弃选项卡。我有一个关于如何使用拆分来管理窗口的截屏视频。

    http://lococast.net/archives/111

    至于 ruby​​ 的输出,这里可能会涉及到:

    https://superuser.com/questions/133886/vim-displaying-code-output-in-a-new-window-a-la-textmate

    【讨论】:

    • 不确定 OP 的具体情况,但总是忽略标签以支持拆分是错误的。 Vim 实例中的拆分类似于桌面上的窗口。选项卡类似于多个桌面。此外,拆分有时效果不佳。例如,我的文件具有复杂的 foldexpr 折叠,可能需要几秒钟才能在拆分中打开 - 即使缓冲区已经加载。如果我在单独的选项卡上打开缓冲区,它们可以立即访问;如果我尝试根据需要将它们加载到拆分中,我每次都有等待期。拆分、制表符是互补的,不是非此即彼。
    • 来自这个线程。显示输出。 :!ruby foo.rb > foo.out & 然后 :e foo.out 。是否有一种方法可以将此操作分配给 foo 保持不变(因为文件已经被保存到语法突出显示)到单个键说 Alt +z?我很快就会看看你的截屏视频:-)
    • @sayth: 为什么不做一个拆分窗口(:wincmd w 或 w)然后让 ruby​​ 将输出直接路由到窗口中: (:1,1!ruby foo.rb)?这不适合你吗?
    • @sayth:对不起,命令应该使用'n'而不是'w'。所以这里是使用顺序: (1) :wincmd n ,然后 (2) :1,1!ruby foo.rb
    【解决方案3】:

    在回答您关于打开选项卡作为输出的问题时,我认为没有任何内置方法可以做到这一点。有RunView plugin(请参阅我对this questionthis one 的回答),但我认为它不支持使用单独的选项卡(它适用于拆分窗口:我认为你说的时候指的是'视图')。

    关于交互式控制台:不,这是不可能的。见:help design-not

    至于 Vim 的一般用途,请尝试习惯缓冲区的概念以及每个“视图”(我的术语)的事实,无论是拆分窗口、选项卡还是其他只是查看的方式一个特定的缓冲区。您可以在单个缓冲区上有多个视图,因此您可以在一个选项卡中使用两个标题垂直分割源文件,并且在另一个选项卡中使用另一个标题和同一源文件的不同位垂直分割相同的源文件。一旦你习惯了它,它就非常强大。 Ctrl-W 键盘快捷键是您的朋友(例如,Ctrl-W, h 左移一个窗口)。

    至于将选项卡更改为拆分窗口,我认为没有直接的方法可以做到这一点(Vim 怎么知道你想加入哪些选项卡?)。您可以使用Ctrl-W + T 将拆分拆分为一个选项卡,但要返回,您必须创建几个映射。这不是我的想法,但这样的事情可能会奏效:

    command! TakeThis let takebufnr = bufnr("")<CR>
    command! SplitTaken exe 'split #' . takebufnr<CR>
    nmap ,t :TakeThis<CR>
    nmap ,s :SplitTaken<CR>
    

    然后在要抓取的缓冲区上按,t,在要与“已占用”缓冲区拆分的缓冲区上按,s

    【讨论】:

    • 关于“交互式控制台”,实际情况可能与您建议的有所不同。虽然 Vim 确实无法实现与 Emacs 等的集成,但绝对可以使用 Vim 以有用的方式进行交互。参见,例如,Vicle 插件 (vim.org/scripts/script.php?script_id=2551) 或提供与 Ruby 调试器集成的 VimDebug 插件 (vim.org/scripts/script.php?script_id=663)。我不能特别保证任何一个,但 Vim 绝对能够实现有用的交互水平。
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2011-11-23
    相关资源
    最近更新 更多