Interactive search and replace from shell Interactive search and replace from shell shell shell

Interactive search and replace from shell


KISS principle:

vim:args `ls`:argdo %s#SEARCH#REPLACE#gec |update

First character afer %s is used as separator


I would add these modifications to Dillon's answer:

The -le option should be added to the grep command.

vim `find . -name '*.c' -exec grep -le '\<junk\>'  {} \;`

Then you are in Vim, but you don't have the opportunity to choose what to replace, add c option at the end for interactive replacements and bufdo at the beginning for walking through every file:

:bufdo %s/junk/rubbish/gce

Later you save all your work:

:bufdo wq!


From jhvaras answer, I've made this bash command to quickly search and replace (to add to .bashrc):

replace () {    if [ $# -lt 2 ]    then        echo "Recursive, interactive text replacement"        echo "Usage: replace text replacement"        return    fi    vim -u NONE -c ":execute ':argdo %s/$1/$2/gc | update' | :q" $(ag $1 -l)}

It's used as follows:

~$ replace some_text some_new_text

It uses ag to search in advance, as it's probably faster than letting vim do the work, but you can probably substitute anything else you like. It also calls vim with no plugins for maximum speed, and after it has finished all substitutions it automatically quits and goes back to the shell.