> 'abc' in FILE, from within vi. * % means 'the current file' in vi commands so you can write * | is the command separator * grep has a -c flag to count occurrences
so you can write: :w|grep -c abc % you can also write the content of the buffer to a pipe (my prefered solution here): :w !grep -c > Sadly, :E doesn't actually work in vim. It says > > E464: Ambiguous use of user-defined command > I don't know what works in vim. vim prolly has a dozen > chrome-electroplated ways to do the same thing, but I don't know them. :h windows also: :h :new :h :enew :h gf :h :bu :h :ls :h :bw the following code isfrom my ~/.vimrc so i can: * navigate into buffers with <left> and <right> arrows * come back to the first buffer with <down> * have a fzf menu of the current buffers using <up> set hidden command! -nargs=0 BU redir! > ~/.v.json | silent echo json_encode(getbufinfo()) | redir END \| silent exec "!vim_BU ~/.v.json ~/.v" \|so ~/.v \|redraw! nnoremap <up> <esc>:BU<cr> nnoremap <down> :bfirst!<cr> nnoremap <left> :bnext!<cr> nnoremap <right> :bprevious!<cr> the code of vim_BU (i can probably get grid of perl and use jq instead): vim_BU () { perl -MEnv -MJSON -w0 -nE' map +( printf "%3s %s%s %s\n" , $$_{bufnr} , ( $$_{hidden} ? "h" : "a" ) , ( $$_{changed} ? "+" : " " ) , ( length $$_{name} ? $$_{name} : "NONAME" ) ), @{ decode_json $_ } ' $1 | fzf | awk '{print "bu "$1}' > $2 } regards marc