Как удалить текущий файл в vim?

Как я могу удалить с диска текущий открытый файл из vim? Было бы неплохо также закрыть буфер.

Я вижу, что вы можете использовать NERDTree для этого, но я не использую этот плагин.

Ответ 1

Использование внешнего инструмента, такого как rm (1), отлично, но Vim также имеет свою собственную функцию delete() для удаления файлов. Преимуществом этого является переносимость.

:call delete(expand('%'))

Альтернативный способ выразить это :call delete(@%), который использует регистр % (текущий файл) (отзыв от @accolade).

Чтобы полностью очистить текущий буфер, как представление файла на диске, так и буфер Vim, добавьте :bdelete:

:call delete(expand('%')) | bdelete!

Вы, вероятно, захотите сопоставить это в соответствии с вашими предпочтениями.

Ответ 2

Посмотрите Удалить файлы с помощью команды Vim. Раздел Comments должен иметь то, что вы ищете:

В основном, Rm удалит текущий файл; RM удалит текущий файл и выйдет из буфера (без сохранения) за один раз.

В качестве альтернативы вы можете просто выдать команду оболочки для удаления текущего файла:

:!rm %

Ответ 3

Иногда плагин может быть привлекательным решением даже для простой задачи. В этом случае нам повезло, так как eunuch.vim всемогущего Тима Папы.

Своими словами eunuch.vim предоставляет

Сак Vim для команд оболочки UNIX, которые в ней больше всего нуждаются. Удалите или переименуйте буфер и базовый файл одновременно. Загрузите a find или locate в список quickfix. И так далее.

Perfect. Он имеет то, что нам нужно, плюс некоторые дополнительные инструменты, если мы находимся в системе UNIX.

Команда, которую вы ищете,

:Remove!

Опять повторите его, если вам это нужно, например, :nnoremap <Leader>rm :Remove!<CR>.

Ответ 4

Мне нравится удалять файлы из vim, но я также параноик о случайном удалении важной работы, которая по той или иной причине еще не находится под контролем версий. Мне полезно совместить предыдущую информацию из @glts и @accolade с этим ответом о том, как использовать команду confirm для запроса перед выходом из vim.

Объединяя это, я добавил функцию в свой ~/.vimrc, который запрашивает перед удалением файла и закрытием буфера и сопоставляет его с комбинацией клавиш:

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()

fun! DeleteFileAndCloseBuffer()
  let choice = confirm("Delete file and close buffer?", "&Do it!\n&Nonono", 1)
  if choice == 1 | call delete(expand('%:p')) | q! | endif
endfun

Если вы являетесь одним нажатием клавиш, менее параноидальным, чем я, вы можете добавить <CR> в первую строку

nnoremap <Leader>d. :call DeleteFileAndCloseBuffer()<CR>

и только один раз нажмите один раз.

Ответ 5

Вы можете сделать это двумя шагами:

  • сохранить как новый файл

    : w newfilename

  • удалить старый файл

    ! rm oldfilename