Как удалить с диска текущий открытый файл из vim? Было бы неплохо также закрыть буфер.Как удалить текущий файл в vim?
Я вижу вас can use NERDTree for that, но я не использую этот плагин.
Как удалить с диска текущий открытый файл из vim? Было бы неплохо также закрыть буфер.Как удалить текущий файл в vim?
Я вижу вас can use NERDTree for that, но я не использую этот плагин.
Использование внешнего инструмента, как п.м. (1) в порядке, но Вим также имеет свой собственный delete()
функция для удаления файлов. Преимуществом этого является переносимость.
:call delete(expand('%'))
Альтернативный способ выражения это :call delete(@%)
, который использует %
(текущий файл) регистр (наконечник с помощью @accolade).
Чтобы полностью очистить текущий буфер, как представление файла на диске и буфер Vim, добавьте :bdelete
:
:call delete(expand('%')) | bdelete!
Вы, вероятно, хотите отобразить это в соответствии с вашими предпочтениями.
Посмотрите на Delete files with a Vim command. Раздел Comments должен иметь то, что вы ищете:
В принципе, Rm удалит текущий файл; RM удалит текущий файл и закроет буфер (без сохранения) за один раз.
В качестве альтернативы, вы можете просто выполнить команду оболочки, чтобы удалить текущий файл:
:!rm %
Это нечто настолько простое, что я почти не могу поверить, что мне нужно создать сценарий для этого. Благодарю. – fotanus
удаление с помощью '! Rm%', есть ли способ избежать предупреждения, когда vim вернется в буфер? – fotanus
С некоторыми специальными символами в имени файла эта команда не работает, например, если имя файла равно 20130711-контактам # 285.vcf, в котором есть пробел, он сказал бы: «rm: не может удалить« 20130711-контакты »: такого файла нет или каталог ' – Saeed
Иногда плагин может быть привлекательным решением даже для простой проблемы. В этом случае нам повезло, так как есть eunuch.vim от всемогущего Тима Папы.
В своих собственных словах eunuch.vim обеспечивает
Vim сахара для команд UNIX оболочки, которые нуждаются в ней больше всего. Удалите или переименуйте буфер и базовый файл одновременно. Загрузите
find
илиlocate
в список быстрого списка. И так далее.
Perfect. Он имеет то, что нам нужно, плюс некоторые дополнительные инструменты, если мы находимся в системе UNIX.
Команда, которую вы ищете
:Remove!
Опять же, переназначить его, если вам это нужно много, например, :nnoremap <Leader>rm :Remove!<CR>
.
Я искал способ обойтись без плагинов, поэтому я приму свой другой ответ. Плагин выглядит хорошо :-) – fotanus
Этот плагин довольно удобен, если вам нужны vim-способы 'mv',' mkdir', 'find' и т. Д. HIghly рекомендую. –
Вы можете сделать это в два этапа:
сохранить как новый файл
: ш newfilename
удалить старый файл
! ет oldfilename
Мне нравится быть в состоянии удалить файлы из Vim, но я также параноидален случайно удалить важную работу, которая, по той или иной причине, которая еще не находится под контролем версий. Мне полезно совместить предыдущую информацию от @glts и @accolade с this answer о том, как использовать команду 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>
и только должны нажать возврат один раз.
Я настоятельно рекомендую использовать 'expand ('%: p')' вместо '@%', когда вы все равно скрипте. (Хотя мне льстит, что вы включили мой намек :), краткость выгоды незначительно в сценарии. Что еще более важно:) '%: p' расширит имя файла до полного абсолютного пути (который он может или не может быть уже). С помощью '%' вы запускаете небольшой риск удаления файла с тем же именем в другом каталоге, если вы забыли, что вы ': cd'ed там. –
Спасибо за пионтинги! Я обновил свой ответ соответственно. –
Спасибо! Кажется, что работает следующая карта в .vimrc: 'nnoremap rm: call delete (expand ('%')) \ | bdelete! '. Вы можете добавить свой ответ. –
fotanus
Это сопоставление не является идеальным. Мы не хотим разорвать команду ['r'] (http://vimdoc.sourceforge.net/htmldoc/change.html#r)! Лучше префикс вашего сопоставления с помощью [' ...'] (http://vimdoc.sourceforge.net/htmldoc/map.html#mapleader). –
glts
не идеален даже потому, что легко удалить файл и закрыть буфер без намерения! Но мне это нужно только в качестве временного решения. – fotanus