Как я могу удалить с диска текущий открытый файл из 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>
. Вы можете добавить свой ответ.