Как я могу удалить с диска текущий открытый файл из vim? Было бы неплохо еще и буфер закрыть.
Я вижу, вы можете использовать для этого NERDTree , но я не использую этот плагин.
Как я могу удалить с диска текущий открытый файл из vim? Было бы неплохо еще и буфер закрыть.
Я вижу, вы можете использовать для этого NERDTree , но я не использую этот плагин.
Ответы:
Можно использовать внешний инструмент, такой как rm (1), но у Vim также есть собственная delete()функция для удаления файлов. Это имеет преимущество портативности.
:call delete(expand('%'))
Альтернативный способ выразить это - :call delete(@%)использовать %регистр (текущего файла) (подсказка @accolade).
Чтобы полностью очистить текущий буфер, представление файла на диске и буфер Vim, добавьте :bdelete:
:call delete(expand('%')) | bdelete!
Вероятно, вы захотите сопоставить это в соответствии с вашими предпочтениями.
rкоманду! Лучше префикс вашего сопоставления с <Leader>....
nnoremap <C-Del> :call delete(expand('%'))<CR>но я не закрываю буфер на случай, если это произойдет случайно; тогда у вас еще есть шанс его спасти.
:call delete(@%)|q!← Краткий вариант (если не хотите отображать). (Буфер остается внутри :lsи может быть восстановлен :bтаким образом; он сохраняет имя файла и параметры буфера, но не содержимое файла.)
:call delete(@%)|bd!и использовать :ls!с, :bчтобы оживить.
Взгляните на Удаление файлов с помощью команды Vim . В разделе комментариев должно быть то, что вы ищете:
Обычно Rm удаляет текущий файл; RM удалит текущий файл и выйдет из буфера (без сохранения) за один раз.
В качестве альтернативы вы можете просто ввести команду оболочки для удаления текущего файла:
:!rm %
!rm %, есть ли способ избежать предупреждения, когда vim вернется в буфер?
%) в кавычки: !rm "%".
%(путь к файлу (« имя файла » в терминологии vim) как первоначально вызванный, потенциально относительный, например, просто имя файла) вместо %:p(абсолютный путь к файлу), вы подвергаетесь небольшому риску удаления файла с таким же именем в другом каталоге вместо этого, если вы забыли, что вы :cdтам написали. Поэтому я настоятельно рекомендую использовать %:pвместо этого, %если вы все равно сопоставите его.
Иногда плагин может быть привлекательным решением даже для простой проблемы. В этом случае нам повезло, так как есть eunuch.vim всемогущего Тима Поупа.
По собственным словам, eunuch.vim предоставляет
Vim сахар для команд оболочки UNIX, которые в нем больше всего нуждаются. Удалите или переименуйте буфер и основной файл одновременно. Загрузите a
findили alocateв список quickfix. И так далее.
Отлично. В нем есть все, что нам нужно, а также некоторые дополнительные инструменты, если мы работаем в системе UNIX.
Команда, которую вы ищете, это
:Remove!
Опять же, переназначьте его, если он вам очень нужен, например :nnoremap <Leader>rm :Remove!<CR>.
mv, mkdir, findи т.д. очень рекомендую.
Мне нравится удалять файлы из vim, но я также боюсь случайно удалить важную работу, которая по той или иной причине еще не находится под контролем версий. Я считаю полезным объединить предыдущую информацию из @glts и @accolade с этим ответом о том, как использовать confirmкоманду для вывода запроса перед выходом из vim.
Собрав их вместе, я добавил функцию к my ~/.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>
и нужно только один раз нажать клавишу возврата.
expand('%:p')вместо того, @%чтобы писать сценарий. (Хотя я польщен, что вы включили мой намек :) Преимущество краткости в сценарии незначительно. Что еще более важно %:p:) расширит имя файла до полного абсолютного пути (который может быть, а может и не быть). Просто %вы рискуете удалить файл с таким же именем в другом каталоге, если вы забыли, что вы :cdтам редактировали.
Вы можете сделать это в два этапа:
сохранить как новый файл
: w newfilename
удалить старый файл
! rm oldfilename
Это может быть непопулярное мнение, но ваш проводник файлового дерева (Netrw / NerdTree) будет самым простым и безопасным способом удалить файл. Даже если OP не использует NerdTree, встроенный плагин Netrw будет работать так же.
nnoremap rm :call delete(expand('%')) \| bdelete!<CR>. Вы можете добавить свой ответ.