2013-05-21 3 views

ответ

74

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

:call delete(expand('%')) 

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

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

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

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

+6

Спасибо! Кажется, что работает следующая карта в .vimrc: 'nnoremap rm: call delete (expand ('%')) \ | bdelete! '. Вы можете добавить свой ответ. – fotanus

+11

Это сопоставление не является идеальным. Мы не хотим разорвать команду ['r'] (http://vimdoc.sourceforge.net/htmldoc/change.html#r)! Лучше префикс вашего сопоставления с помощью [' ...'] (http://vimdoc.sourceforge.net/htmldoc/map.html#mapleader). – glts

+0

не идеален даже потому, что легко удалить файл и закрыть буфер без намерения! Но мне это нужно только в качестве временного решения. – fotanus

56

Посмотрите на Delete files with a Vim command. Раздел Comments должен иметь то, что вы ищете:

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

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

:!rm % 
+0

Это нечто настолько простое, что я почти не могу поверить, что мне нужно создать сценарий для этого. Благодарю. – fotanus

+3

удаление с помощью '! Rm%', есть ли способ избежать предупреждения, когда vim вернется в буфер? – fotanus

+1

С некоторыми специальными символами в имени файла эта команда не работает, например, если имя файла равно 20130711-контактам # 285.vcf, в котором есть пробел, он сказал бы: «rm: не может удалить« 20130711-контакты »: такого файла нет или каталог ' – Saeed

20

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

В своих собственных словах eunuch.vim обеспечивает

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

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

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

:Remove! 

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

+0

Я искал способ обойтись без плагинов, поэтому я приму свой другой ответ. Плагин выглядит хорошо :-) – fotanus

+0

Этот плагин довольно удобен, если вам нужны vim-способы 'mv',' mkdir', 'find' и т. Д. HIghly рекомендую. –

0

Вы можете сделать это в два этапа:

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

    : ш newfilename

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

    ! ет oldfilename

2

Мне нравится быть в состоянии удалить файлы из 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> 

и только должны нажать возврат один раз.

+1

Я настоятельно рекомендую использовать 'expand ('%: p')' вместо '@%', когда вы все равно скрипте. (Хотя мне льстит, что вы включили мой намек :), краткость выгоды незначительно в сценарии. Что еще более важно:) '%: p' расширит имя файла до полного абсолютного пути (который он может или не может быть уже). С помощью '%' вы запускаете небольшой риск удаления файла с тем же именем в другом каталоге, если вы забыли, что вы ': cd'ed там. –

+1

Спасибо за пионтинги! Я обновил свой ответ соответственно. –

Смежные вопросы