7

I have a file testfile.xml that I want to open with Vim and delete in command mode

9

There are many ways:

  1. Using the intercative shell in vim

    When in the editor -

    :sh
    rm textfile.xml
    
  2. Using Bang(!)

    As DopeGhoti suggested -

    :!rm textfile.xml
    
  3. From this link.

    Add this to your ~/.vimrc

    command! -complete=file -nargs=1 Remove :echo 'Remove: '.'<f-args>'.' '.(delete(<f-args>) == 0 ? 'SUCCEEDED' : 'FAILED')
    

    Then,in vim,

    :Remove testfile.xml
    
  4. Again from the same link in #3

    Use this command:

    :call delete(expand('%')) | bdelete!
    
| improve this answer | |
4

Another way to interactively delete files is to use

:E 

or

:Ex 

for ex(ploring) the file directory. There you have an interactive window that will guide you. Once you select the entry you want deleted, use

Shift-D  

confirm with

y  
return  

This is what it looks like at the top in my window in explorer mode:

" ============================================================================
" Netrw Directory Listing                                        (netrw v140)
"   C:\Users\cbkrd\Desktop
"   Sorted by      name
"   Sort sequence: [\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec
" ============================================================================
| improve this answer | |
  • :E resulted in E464: Ambiguous use of user-defined command, but :Ex worked fine. – Serge Stroobandt May 22 '19 at 0:15
2

To delete the file temporarily

:!rm %

% is the currently opened file

Ctrl+Z, stops the process

check with ls, file no longer on the disk

fg brings back the file on vim

you can save it, using regular vim commands

| improve this answer | |
1

As Yash states: there are many ways. But the shortest one,

:echo delete(@%)

only appears hidden, only at the end of Yash's link:

I don't understand why you would use all those commands and functions.

Why not :echo delete(filename)? Or, if you want to delete file and wipeout buffer, which I guess happens very rarely, you may write :echo delete(@%), and if successfull -- :bw!.

With echo (instead of call) you see the result directly, 0 or -1.


:!rm % by @Justin is probably the same, but there is a screen switch and the "no longer available" message -- with delete() it is smoother.

And I don't understand what rm is filtering here...


The whole idea makes mostly sense if you want to sort out a bunch of files:

vim $(find -size -100c -type f)

If you want to delete/keep some of these small files. you can :n[ext] through them and delete them directly. The :echo delete(@%) should maybe only be mapped temporarily, because it is dangerous. I lost a help file, and renamed another, while experimenting with "%".

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.