Как поменять файлы между окнами в VIM?

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

118
задан mdrozdziel 30 March 2010 в 20:27
поделиться

2 ответа

Есть несколько полезных встроенных команд, которые дают определенный контроль, но он не полный. Основные из них:

  • Ctrl-W, r (т.е. удерживайте CTRL, нажмите W, отпустите CTRL, нажмите r) - это поворачивает окна (первое окно становится вторым, второе - третьим и т.д.). )

  • Ctrl-W, x - поменяйте текущее окно на следующее

  • Ctrl-W, Shift-H - переместите это окно в крайнее левое

  • Ctrl-W, Shift-K - переместите это окно вверх

(и аналогично для Ctrl-W, Shift-J and Ctrl-W, Shift-L). См.:

:help window-moving

--L)).

292
ответ дан 24 November 2019 в 01:46
поделиться

Я написал и использовал следующий фрагмент кода в моем vimrc для {{ 1}} копирование и вставка моих окон Vim.

Это определяет, например, следующие сочетания клавиш:

  • y : «Дергает окно», т.е. сохраняет номер буфера в текущем окне в глобальной переменной.
  • pp : «Помещает окно на место текущего окна», т.е.он считывает номер буфера , сохраненный ранее, и открывает этот буфер в текущем окне. Он также сохраняет номер буфера, который раньше находился в текущем окне .

Если под «заменой этих окон местами» вы имеете в виду «открытие буфера в окне A в окне B, и наоборот, без изменения положения окон », вы можно использовать следующую последовательность клавиатуры для переключения окон:

  1. Выбрать окно A (с помощью мыши или с помощью команд клавиатуры)
  2. Нажмите y (восстановление номера буфера)
  3. Выбрать окно B
  4. Нажмите pp (вставка буфера)
  5. Выберите окно A
  6. Нажмите pp (снова вставьте буфер)

Работает только в Vim> = 7.0.

if version >= 700
function! HOpen(dir,what_to_open)

    let [type,name] = a:what_to_open

    if a:dir=='left' || a:dir=='right'
        vsplit
    elseif a:dir=='up' || a:dir=='down'
        split
    end

    if a:dir=='down' || a:dir=='right'
        exec "normal! \<c-w>\<c-w>"
    end

    if type=='buffer'
        exec 'buffer '.name
    else
        exec 'edit '.name
    end
endfunction

function! HYankWindow()
    let g:window = winnr()
    let g:buffer = bufnr('%')
    let g:bufhidden = &bufhidden
endfunction

function! HDeleteWindow()
    call HYankWindow()
    set bufhidden=hide
    close
endfunction

function! HPasteWindow(direction)
    let old_buffer = bufnr('%')
    call HOpen(a:direction,['buffer',g:buffer])
    let g:buffer = old_buffer
    let &bufhidden = g:bufhidden
endfunction

noremap <c-w>d :call HDeleteWindow()<cr>
noremap <c-w>y :call HYankWindow()<cr>
noremap <c-w>p<up> :call HPasteWindow('up')<cr>
noremap <c-w>p<down> :call HPasteWindow('down')<cr>
noremap <c-w>p<left> :call HPasteWindow('left')<cr>
noremap <c-w>p<right> :call HPasteWindow('right')<cr>
noremap <c-w>pk :call HPasteWindow('up')<cr>
noremap <c-w>pj :call HPasteWindow('down')<cr>
noremap <c-w>ph :call HPasteWindow('left')<cr>
noremap <c-w>pl :call HPasteWindow('right')<cr>
noremap <c-w>pp :call HPasteWindow('here')<cr>
noremap <c-w>P :call HPasteWindow('here')<cr>

endif
7
ответ дан 24 November 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: