top | item 44953074

(no title)

vanous | 6 months ago

Very cool! A while ago i did something similar and tried to learn vim more in depth by creating some more complex macros - several of them, to convert some text snippets into markdown. Problem was, that several months later i could not exactly remember some details of these "reusable" macros - where exactly to place cursor when starting them, the order of execution and so on. Thankfully, vim has the amazing ability to run commands/script on text selection, so i rewrote my macros in a scripting language. It has several bonus points: i can store them in git and track changes, code can be self-documented via comments. My macros were not too complex, but still, using a proper scripting ended up being much better.

discuss

order

aidenn0|6 months ago

Macroing Tip: whenever possible start a macro with a motion that will move the cursor to a known location. E.g. for line-oriented macros use "0" and for paragraph oriented macros use "}{". Then the macro will work regardless of where you put the cursor.

xarcolade|6 months ago

Perfect! Great advice

xarcolade|6 months ago

Insightful! I have had the same issue with forgetting where exactly I need the cursor. I did not know you could run script/commands on text selection, I will definitely look into this. The extent of my vimscript journey so far is directly making system() calls to external scripts, and I've been using the ability to Ctrl-R while entering a :command to dump yanked text as a crutch. Your approach sounds much more sensible.

vanous|6 months ago

Glad you find it useful. Below is an example script to demonstrate the concept. It is awesomely powerful. In vim, select some text and do this:

  :'<,'>! ./example.py

  #!/bin/env python3
  #:'<,'>! ./example.py # ← this is how to use it
  import sys
  data = sys.stdin.readlines()
  for l in data:
    l = l.replace("a", "e").rstrip()
    print(l)