Скасувати закриту вкладку у Vim


77

Я закриваю вкладку у vim і відразу усвідомлюю, що мені потрібно її знову відкрити для чогось. Чи є спосіб скасувати закриття вкладки у Vim 7.2?


Чи можна це перенести на vi.stackexchange.com?
Сукіма

Привіт, цей біт vimscript та плагін windowlayout виконує свою роботу: він відкриває щойно закриту вкладку та повертає макет вікна, який у вас був.
Янн Томас-Жерар

Відповіді:


11

Я використовую модуль MRU (останні нещодавно використані файли) . Тож я можу редагувати останні 30 файлів, які щойно відредагував

Ось метадані плагіна MRU:

File: mru.vim
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
Version: 3.2   Last Modified:
September 22, 2008

Використання

Для переліку та редагування файлів зі списку MRU можна скористатися командою ": MRU". Команда ": MRU" відображає список файлів MRU у тимчасовому вікні Vim. Якщо вікно MRU вже відкрито, то список MRU, що відображається у вікні, оновлено.


5
Чи можете ви узагальнити основне використання?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Я не розумію цієї відповіді ... Схоже, рекомендується використовувати плагін?
Martin Tournoij

@Carpetsmoker Так, це: mru.vim.
trusktr

це не так корисно, якщо ви щойно відкрили 10 файлів на вкладках, перейшли на один із середніх, а потім закрили його, тому що MRU відображатиме останні 10 відкритих файлів саме в тому порядку, в якому вони були відкриті, і, звичайно, ви могли б відкрити більше і
загубись

140

Ваш файл, ймовірно, все ще відкритий у буфері:

:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number

Щоб знову відкрити буфер 18, наприклад:

:tabnew +18buf

5
:tabnew Nне працював у мене. Що я роблю, :tabnewтоді :bNде N - номер буфера
alf

@alfonso: команда, :tabnew +Nbufде N - номер буфера. Він повинен бути доданий знаком + і суфіксом слова "buf".
greyfade

5
Приклад того, що означав @greyfade:tabnew +18buf
Ху

3
ви навіть могли зробити: vsp + [bufferNumber] buf допоміг мені знову відкрити закритий спліт у моєму vim
3emad

4
Причина, по якій це не працює, полягає в тому, що +посилання на рядок НЕ є посиланням на буфер, а #не +як :tabe #5для відкриття буфера 5 у новій вкладці.
Сукіма

31
:tabnew#

Відкриває нещодавно закритий файл у новій вкладці


Змінити : Будь ласка, використовуйте відповідь greyfade. Мені не подобається моя відповідь, але я зберігаю її тут для довідок та корисної інформації про коментарі.


Дивно, здається, що спочатку це спрацювало, зараз відкриває не пов’язані між собою буфери.

#- останній відредагований файл у поточному вікні. Закриття вкладки не реєструє файл як альтернативний ( #). Ви повинні шукати його за номером буфера ( :ls)
Сукіма

Це працює більш ніж ідеально, якщо ви орієнтовані на розкол.
Ал.Г.

запит про помилку: "E194: Немає альтернативної назви файлу, щоб замінити" # ""
Скотт Янг

6

Проста відповідь - ні, нічого вбудованого немає.

Але ефективним рішенням було б використання плагіна, такого як чудовий BufExplorer . Оскільки за замовчуванням спочатку перераховані останні використовувані буфери, повторне відкриття закритої вкладки було б таким же простим, як натискання\bet


Як згадала Люсія, спочатку потрібно спуститися, <leader>be<Down>tщоб це спрацювало.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1

Скористайтеся плагіном Ben рекомендований: BufExplorer Github Mirror

У його відповіді треба було б натиснути <Leader>be<Down>t. Додавання трохи ярлика:

map <silent><leader>t <leader>be<Down>t

Тож це просто <leader>tзробило б роботу.


1

Якби була BufferCloseподія, це було б просто ... але, здається, це неможливо, оскільки це неможливо для створення вікна .

Але у випадку з вкладками ми можемо виявити, чи була вкладка закрита, ведучи підрахунок та враховуючи різницю між TabLeaveі TabEnter.

Використання: <leader>trвідкриває останню закриту вкладку на новій вкладці (припустимо, що вкладка мала лише один буфер):

let g:reopenbuf = expand('%:p')
function! ReopenLastTabLeave()
  let g:lastbuf = expand('%:p')
  let g:lasttabcount = tabpagenr('$')
endfunction
function! ReopenLastTabEnter()
  if tabpagenr('$') < g:lasttabcount
    let g:reopenbuf = g:lastbuf
  endif
endfunction
function! ReopenLastTab()
  tabnew
  execute 'buffer' . g:reopenbuf
endfunction
augroup ReopenLastTab
  autocmd!
  autocmd TabLeave * call ReopenLastTabLeave()
  autocmd TabEnter * call ReopenLastTabEnter()
augroup END
" Tab Restore
nnoremap <leader>tr :call ReopenLastTab()<CR>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.