【问题标题】:How to flip windows in vim? [duplicate]如何在vim中翻转窗口? [复制]
【发布时间】:2011-08-29 14:24:24
【问题描述】:

可能重复:
To switch from vertical split to horizontal split fast in Vim

如果我有 2 个水平分割的窗口,如何旋转它们以获得 2 个垂直分割的窗口?

以及如何切换缓冲区?

【问题讨论】:

  • 切换缓冲区?还是windows
  • @Johnsyweb 切换缓冲区,旋转窗口。但我明白了......

标签: vim


【解决方案1】:

如果你让它们垂直分割 C-wJ 移动一个到底部

如果你让它们水平拆分 C-wL 向右移动一个

要在拆分窗口的“列”或“行”中旋转,C-wC-r

以下命令可用于更改窗口布局。例如, 当有两个垂直分割的窗口时, CTRL-W K 将改变它 水平分割窗口。 CTRL-WH 反之。

【讨论】:

  • 我终于开始“感觉”了。令人惊讶的是,没有这些命令我能活多久。
  • 要旋转拆分窗口,我相信你实际上只需要“C-w r”,而不是“C-w C-r”。
  • @TomLord 这也有效。虽然这不需要“更少”。只是不同而已。而且我碰巧认为“C-w r”有点尴尬(特别是如果重复的话)
  • @AmagicalFishy 只是 wincmd 和光标键助记符:vimdoc.sourceforge.net/htmldoc/windows.html#:wincmd
  • 在打开 4 个窗口时无法正常工作 - 不是垂直或水平翻转窗口,而是将窗口推向任一方向的单独级别。对于 2,“C-w x”就足够了
【解决方案2】:

Ctrl-w H 或输入:wincmd H 以从水平到垂直布局。

Ctrl-w J 或输入:wincmd J 以从垂直到水平布局。

Ctrl-w r 或键入:wincmd r交换两个缓冲区,但保持窗口布局相同。

Ctrl-w w 或输入:wincmd w 在两个窗口/缓冲区之间移动光标

您可能希望绑定这些序列中的一个或多个,以加快输入速度。我把它放在我的 .vimrc 中,以便 ,l 将光标移动到当前选项卡中的下一个缓冲区:

let mapleader = ","
nmap <Leader>l <C-w>w

【讨论】:

  • @Nick 前两个确实回答了这个问题,而后两个则超越了这个问题,这非常有用!当我翻译文档时,“交换”功能对我特别有用,因为我更喜欢始终将源语言放在特定的一侧,而且我并不总是按该顺序打开它们:)
  • Ctrl-w r 是最好的!
【解决方案3】:

CTRL-W SHIFT-H 会旋转方向,CTRL -W H 移动到左侧窗口,CTRL-W L 移动到正确的。见

:帮助拆分

:帮助^w

了解更多信息。

【讨论】:

  • 那个是用来切换缓冲区的。如何改变窗户的方向?
  • @Arnis ^wH 将改变窗口布局的方向。 ^wh 移动到左边的窗口。这些操作区分大小写。
  • 太棒了!我喜欢它 H 和 L
【解决方案4】:

如果您只打开两个窗口,当前的答案都可以很好地工作。如果你有更多,移动窗口的逻辑可能会变得很复杂。

我的 .vimrc 中有这个,允许我“拉”和“删除”一个缓冲区,然后将其粘贴到当前缓冲区上方的窗口中或作为 [v] 拆分。

fu! PasteWindow(direction) "{{{
    if exists("g:yanked_buffer")
        if a:direction == 'edit'
            let temp_buffer = bufnr('%')
        endif

        exec a:direction . " +buffer" . g:yanked_buffer

        if a:direction == 'edit'
            let g:yanked_buffer = temp_buffer
        endif
    endif
endf "}}}

"yank/paste buffers
:nmap <silent> <leader>wy  :let g:yanked_buffer=bufnr('%')<cr>
:nmap <silent> <leader>wd  :let g:yanked_buffer=bufnr('%')<cr>:q<cr>
:nmap <silent> <leader>wp :call PasteWindow('edit')<cr>
:nmap <silent> <leader>ws :call PasteWindow('split')<cr>
:nmap <silent> <leader>wv :call PasteWindow('vsplit')<cr>
:nmap <silent> <leader>wt :call PasteWindow('tabnew')<cr>

【讨论】:

  • 不确定你的函数是如何工作的——也许添加一个简单的视觉示例
  • 这太棒了。比C-W J 和朋友好多了。我会用&lt;leader&gt;wP 扩展它到top split&lt;leader&gt;wV:set nosplitright \| call PasteWindow('vsplit') \| set splitright&lt;cr&gt;。而且&lt;leader&gt;wr&lt;leader&gt;we 更有意义(“替换”)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2018-06-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多