Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[VIM] substitute command for a big chunk of text.

15 views
Skip to first unread message

Sam Qasbah

unread,
May 19, 2013, 4:22:49 AM5/19/13
to
Hello.

Given the substitute command:

:%s/old/new/g

sometimes it happens that I would operate the substitution of a big chunk of text (the /old/ part). Is there a way to copy the text from the document and paste it in the command line without the need of typing the full chunk?

Many thanks.

Rui Maciel

unread,
May 19, 2013, 5:58:20 AM5/19/13
to
Sam Qasbah wrote:

> Hello.
>
> Given the substitute command:
>
> :%s/old/new/g
>
> sometimes it happens that I would operate the substitution of a big chunk
> of text (the /old/ part).

What do you mean by "operate the substitution of a big chunk of text"?
Could you provide an example which demonstrates this?


Rui Maciel

samq...@gmail.com

unread,
May 19, 2013, 6:37:33 AM5/19/13
to
Well, I got the following file:

----[begin]

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum negabat. Nihil enim hoc differt. Quis negat?

Ita prorsus, inquam; Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid sentiam? Non laboro, inquit, de nomine.

Non igitur bene. Laboro autem non sine causa; Quid enim possumus hoc agere divinius? Sequitur disserendi ratio cognitioque naturae; Sed fortuna fortis;

Negare non possum. Cur haec eadem Democritus? An nisi populari fama? Beatum, inquit.

Quis est tam dissimile homini. In schola desinis. Nihil sane. Quid Zeno? Idemne, quod iucunde?

Haeret in salebra. Quid ad utilitatem tantae pecuniae? Quae cum dixisset, finem ille. Oratio me istius philosophi non offendit;

Id Sextilius factum negabat. Haec dicuntur inconstantissime. Bonum integritas corporis: misera debilitas. Sed residamus, inquit, si placet. An eiusdem modi? Idem adhuc;

Istam voluptatem, inquit, Epicurus ignorat? Prioris generis est docilitas, memoria; Polycratem Samium felicem appellabant. Id mihi magnum videtur.

Haec dicuntur inconstantissime. Iam id ipsum absurdum, maximum malum neglegi. Quo tandem modo? Istic sum, inquit. Quo modo? Hunc vos beatum; Si quicquam extra virtutem habeatur in bonis. Si longus, levis.

Ego vero isti, inquam, permitto. Sit enim idem caecus, debilis. Quis est tam dissimile homini.

Istic sum, inquit. Non potes, nisi retexueris illa. Cur id non ita fit? Audeo dicere, inquit. Quibusnam praeteritis? Illi enim inter se dissentiunt.

Quae duo sunt, unum facit. Compensabatur, inquit, cum summis doloribus laetitia. Non laboro, inquit, de nomine. Erat enim Polemonis.

Satis est ad hoc responsum. Res enim concurrent contrariae. Quis est tam dissimile homini. Cum praesertim illa perdiscere ludus esset. Negare non possum. Faceres tu quidem, Torquate, haec omnia;

In schola desinis. Duo enim genera quae erant, fecit tria. Ita credo. Oratio me istius philosophi non offendit; Fortemne possumus dicere eundem illum Torquatum? Quo igitur, inquit, modo? Eademne, quae restincta siti? Prioris generis est docilitas, memoria;

Huius ego nunc auctoritatem sequens idem faciam. Quare conare, quaeso. Quo tandem modo?

Negare non possum. Sed fortuna fortis; Cur iustitia laudatur? Quare attende, quaeso.

Sequitur disserendi ratio cognitioque naturae; Cur id non ita fit? Praeclarae mortes sunt imperatoriae; Qui convenit? Sint modo partes vitae beatae. Quae cum essent dicta, discessimus.

----[end]

Now I want to substitute every occurrence of the words from 'ipsum dolor sit amet' till the words 'non sine causa' in the full file with the word 'lallopalla'. I should type something like this:

:%s/ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
autem non sine causa/lallopalla/g

As you can see, given the search command

:%s/old/new/g

the /old/ part is:

ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
autem non sine causa

the /new/ part is:

lallopalla

Now I would know the way to give the command:

:%s/ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
autem non sine causa/lallopalla/g

without typing by hand the whole /old/ part, namely:

ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
autem non sine causa

in other words a way to copy the words:

ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
autem non sine causa

from the text and paste it into the commend line without typing it, I say without press my fingers on the keyboard for every single char in the paragraphs:

ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
autem non sine causa

I hope to have been clear now. Otherwise I can explain even better.

samq...@gmail.com

unread,
May 19, 2013, 6:41:39 AM5/19/13
to

Rui Maciel

unread,
May 19, 2013, 7:44:42 AM5/19/13
to
samq...@gmail.com wrote:

> Now I would know the way to give the command:
>
> :%s/ipsum dolor sit amet, consectetur adipiscing elit. Sin aliud quid
> voles, postea. Itaque contra est, ac dicitis; Id Sextilius factum
> negabat. Nihil enim hoc differt. Quis negat?\n\nIta prorsus, inquam;
> Polycratem Samium felicem appellabant. Egone quaeris, inquit, quid
> sentiam? Non laboro, inquit, de nomine.\n\nNon igitur bene. Laboro
> autem non sine causa/lallopalla/g
>
> without typing by hand the whole /old/ part, namely:

You could yank the whole "ipsum dolor (...) sine causa" bit to a register,
and run the seach/replace operation based on that register. The trick is
that the register contents need to be escaped.

To yank the search pattern into register a:

1) place the cursor over the "ipsum"
2) go to visual mode
3) place the cursor over the "causa"
4) "ay<enter>


Now, to search for the contents stored in register a:

1) :%s:
2) <ctr+r> =

now the command prompt is "="

3) substitute(strtrans(@a),'\^@','\\n','g')<enter>

now the command prompt includes the content of register with the newline
characters replaced with proper search patterns.

4) :lallopalla:g<enter>

There you go.


Hope this helps,
Rui Maciel


0 new messages