Slashdot Mirror


(Useful) Stupid Vim Tricks?

haroldag writes "I thoroughly enjoyed the recent post about Unix tricks, so I ask Slashdot vim users, what's out there? :Sex, :b#, marks, ctags. Any tricks worth sharing?"

45 of 702 comments (clear)

  1. best one ever by shawn(at)fsu · · Score: 4, Funny

    :r! emacs /I partly kid I like Vi

    --
    500 dollar reward for tip(s) leading to the arrest of the person(s) who stole my sig.
    1. Re:best one ever by smcameron · · Score: 3, Informative

      For all your vi/Emacs flamewar needs, try http://wordwarvi.sourceforge.net/ Full disclosure, I'm the author of that game.

    2. Re:best one ever by rpresser · · Score: 4, Funny

      $ sudo bash
      Password:
      # test -f /bin/emacs  && mv /bin/emacs /bin/emacs.NEVER
      # cat <<EOF >/bin/emacs
      #!/bin/bash
      echo emacs: command not found
      EOF
      # exit
      $ logout

  2. Re::Sex by Anonymous Coward · · Score: 5, Funny

    You're asking on the wrong site. No one on Slashdot has ever tried it.

  3. Re::Sex by TrekkieTechie · · Score: 5, Funny

    I'll tell you when you're older.

  4. Filter Lines by saberworks · · Score: 4, Interesting

    Use visual mode (shift-v) to highlight lines, then shell out to external programs to filter them, such as perltidy. To do that, with lines highlighted, type !perltidy (assuming you have it on your machine). This lets you filter specific lines instead of the whole file.

  5. Couple off-hand by Reality+Master+101 · · Score: 4, Interesting

    Not horribly exciting ones, but useful:

    xp - reverse next two characters
    dL - Delete to end of page, in other words, everything visible.
    C - Often overlooked: chop off end of line and go into insert mode.

    --
    Sometimes it's best to just let stupid people be stupid.
  6. Vim tips by icsEater · · Score: 5, Informative

    Why bother asking slashdot when all the best Vim tips have been collected and compiled? http://vim.wikia.com/wiki/Best_Vim_Tips

    1. Re:Vim tips by Amazing+Quantum+Man · · Score: 4, Informative

      :%s/\<\([Ss]\)iteCode\>/\1iteIdentifier/g

      --
      Fascism starts when the efficiency of the government becomes more important than the rights of the people.
    2. Re:Vim tips by TimJL · · Score: 3, Informative

      I'd like to pimp my own cheat sheet here: http://tjl2.com/sysadmin/vim-cheat-sheet.html I love Vim!

  7. Re:Replacement by Reality+Master+101 · · Score: 4, Informative

    Also, you can do use "ma" to mark the beginning line, "mb" to mark the ending line, and then:

    :'a,'bs/FROM/TO/g

    --
    Sometimes it's best to just let stupid people be stupid.
  8. very useful (especially for noobs) by gEvil+(beta) · · Score: 5, Funny

    :q

    --
    This guy's the limit!
    1. Re:very useful (especially for noobs) by Anonymous Coward · · Score: 4, Funny

      surely:

      :q!
      nano

  9. = and * by Lalakis · · Score: 3, Informative

    There are far too many "essential" commands in vim, but if I had to pick the two that make the most difference, I would pick * and =. * searches for the word under the cursor and = indents the selected text (most useful for programming).

  10. retab by DigitalCrackPipe · · Score: 4, Informative

    :ret over highlighted text will reformat using the tabbing rules set up in your .vimrc files. Quite handy when you have legacy code and new code mixed together leaving a big mess when opened in a viewer with different settings.
    And, to remove the ^M from files that came from windows:
    :se ff=unix

  11. Re:Just using VIM by jDeepbeep · · Score: 3, Funny

    is itself a stupid trick. Emacs sucks too. Please welcome you to 21 century - use textedit!

    No thank you. edlin works just great for me.

    --
    Reply to That ||
  12. Need a way to un-highlight by bugnuts · · Score: 4, Informative

    Am I just a vim noob? After doing a search and loving the nice highlighting, is there a way to unhighlight the search term without doing a "/lkasjdfkjdfdf"? In less(1), you'd hit <esc>u but haven't found anything for vim.

    The tricks I use in vi/vim are mostly the arcane flags.

    :set nows

    will not search past the top or bottom.

    :set sw=4

    will make a nice indentation shiftwidth, especially for using the indent command (>). Works great for programming, especially with autoindent (:set ai). But when programming with autoindent, you often need to unindent one shiftwidth... do that by typing control-D at the beginning of the line. You can go to the very beginning of an autoindented line with 0 control-D.

    :set list
    :set nolist

    will turn on/off hidden characters, and show end of lines. Great for finding tabs or spaces at the end of a line.

    :set nu

    will turn on line numbering.

    Of course, if you want actual line numbers in your file, in *nix you'd use
    :%!cat -n

    %

    when pressed over a parenthesis, finds the matching parenthesis or brackets

    Now, I want someone to write a lisp interpreter based in vi macros. That way we can port emacs to vi.

  13. WTF?? by monkeySauce · · Score: 5, Funny

    I typed :Sex and it opened up a HUGE list of folders choc full of porn!

    1. Re:WTF?? by snspdaarf · · Score: 4, Funny

      Congratulations! You found the Easter egg!

      --
      Why, without your clothes, you're naked, Miss Dudley!
  14. Re:Replacement by iggya · · Score: 5, Informative

    One of vi's best features is the '.' command to repeat what you last did. You can do 'dd' to delete a line, then press '.' (dot) to do it again. Or '100.' to do it 100 times. Typing in numbers before a command repeats the command. Typing in '100ihello[esc]' will insert 'hello' 100 times. Then typing dot will give you 100 more.

    On a modern vi you can press up-arrow after pressing colon to get your previous colon command back for editing.

    Some examples of changing things on various lines:

    # add 'gronk' to the end of every line
    # 1 is line 1, $ is the last line
    :1,$ s/$/gronk/
    # put 'bing' at the start of lines 5-10
    :5,10 s/^/bing/
    # change foo to bar for all occurrences in the rest of
    # the file from where the cursor is
    :s/foo/bar/g

  15. delete a block of lines larger than the screen by prgrmr · · Score: 3, Informative

    move up to the top line of the block to be delete

    mm (sets a marker "m")

    move down to the last line in the block

    d`m (deletes to marker "m", and that's the grave below the tilde, not the back-quote)

  16. Re:Just using VIM by tchuladdiass · · Score: 5, Insightful

    If you are on a single box, that is fine. But when you have to admin about 500 servers, spread out across the country, and sometimes over a dial-up link, you often don't have a graphical environment available. Even on the local network, I often ssh from one box to the next, and forget to forward my X11 connections. Since vi is always available, that is what I use.

    The other thing is that I appreciate having only minimal hand movement to get around a file and make changes. Much like people used to love the Word Star diamond, the same thing with vi's ctrl-f, ctrl-b, h, j, k, l, etc. And since I've been using it for about 20 years, these commands are second nature to me. Not to mention the search/replace supporting regular expressions (something a lot of gui word processors don't have).

  17. Re:Just using VIM by tolan-b · · Score: 5, Insightful

    Try using most GUI editors on a remote server over ssh. Kate may be an exception with KDE's nice network abstraction I don't know (I use Gnome), but to be honest for me the main utility of vi is that I know it's going to be there in any Linux enviroment (and I suspect Unix in general).

  18. Re::Sex by Noksagt · · Score: 4, Informative

    :help sex

    :Sexplore[!] [dir]... Split&Explore directory of current file *:Sexplore*

    e.g. it give you a file exploring pane above the buffer you are currently using.

  19. Re:Replacement by pluther · · Score: 5, Informative

    Very cool. I didn't know how to mark a range like that before.

    And, while we're having fun with search and replace, ^ will match the beginning of a line, so if you mark as above, and then change the command to: :'a,'bs/^/#/

    you will have commented out a section of your code without having to insert a comment character independently on each line.
    Reverse it with: :'a,'bs/^#//

    to remove the comments.

    Also, you don't have to use the / command as a separator. Anything typed after s will become the separator, so if you want to, say, change all your Windows paths to Unix paths, instead of starting with: :%s/\\/\//g

    which, while undeniably cool, can be more easily written as: :%s;\\;/;g

    which is a little easier to read.

    Two other interesting bits:

    u all by itself will undo the last command. Handy when you're testing your commands before posting them to Slashdot.

    Also, Slashdot's editor will remove the newlines before any line that starts with a :
    In my examples, I put each command on it's own line, but Slashdot keeps appending them to the previous line. Weird.

    --
    If the masses can keep you down, you're not the Ubermensch.
  20. Re:Just using VIM by eln · · Score: 5, Funny

    Young whippersnappers. When I was "at a young age", it was called vi, and it didn't have any of this fruity syntax highlighting, and if you wanted to navigate around a document you had to use h,j,k,l, not those hand-holding arrow keys.

    Remember the old dig at emacs, "Eight Megs and Constantly Swapping?" Well back then, an 8 MB program actually did mean constant swapping!

    I've been in this business for too damn long.

  21. Stack Overflow by JPLemme · · Score: 4, Insightful

    When did Slashdot become Stack Overflow?

  22. Re:Replacement by MrKaos · · Score: 3, Interesting

    Also, you can do use "ma" to mark the beginning line, "mb" to mark the ending line, and then:

    :'a,'bs/FROM/TO/g

    And if you add a c (confirm) to the end

    :'a,'bs/FROM/TO/gc

    you will get a Y/N to replace that instance or not, in case you don't want to replace every occurrence. if you search like this :'a,'b g/FINDME/ s/FROM/TO/gc

    vi will ask for confirmation to replace FROM to TO only on line between a and b markers on lines with the string FINDME on it.

    :.,$ g/FINDME/p will search from your current cursor position (.) to the end of the document ($) and get /regular expression/ print (i.e grep) inside of vi.

    456G

    go to the 456 line (G for the last line)

    These are a few of my favourite things. Vi plugin for Eclipse and Visual Studio actually makes them have a worthwhile editor, I couldn't imagine not having all the effort I invested into using vi available in some of the "editors" available today.

    --
    My ism, it's full of beliefs.
  23. Re:Stupid vi tricks? by mario_grgic · · Score: 4, Insightful

    Ah, add "set compatible" to your .vimrc file and you have 99% vi behavior.

    Why would you use plain vi, when vim is so much better?

    --
    As the island of our knowledge grows, so does the shore of our ignorance.
  24. Re:Just using VIM by Sancho · · Score: 4, Insightful

    I use Vim primarily because I can perform almost any task without moving my fingers from the standard typing position. I certainly feel much more efficient being able to (for example) use j/k/l/h for movement than moving my hand over to the arrow keys, or worst, to the mouse. That's one of many tasks which simply becomes natural over time (in fact, when I'm typing in a web form, I frequently find myself trying to use Vi shortcuts) and which really make things go more smoothly for me. Even when I'm on a full desktop, I prefer using Vim. I only wish the OS X port of gvim worked better.

    The reason that I don't use EMACS is because of the finger gymnastics you have to perform for even the simplest of tasks. Of course, one could complain similarly about Vi--having to switch to command mode is something that gets just about every single newbie.

  25. Re:Just using VIM by el+momia · · Score: 5, Informative

    :%s/foo/bar/g go through all the file and replace foo by bar :12,20s/foo/bar/ from line 12 to 20 replace foo for bar :s/foo/bar/g in the current line replace foo for bar the g after the last / means to replace all the occurrences of foo vby bar and not only the first one.

  26. Re:Just using VIM by Bandman · · Score: 4, Insightful

    Amen. Know vi, and know the bourne shell, and you're good on close to 100% of the unix machines you'll ever touch.

  27. Re:Stupid vi tricks? by Anonymous Coward · · Score: 5, Funny

    Stupid vi tricks? (Score:2)
    by argent (18001)

    I believe you and your fancy VIM are on this man's lawn.

  28. Re:Just using VIM by Minozake · · Score: 4, Insightful

    The learning curve is worth it, though. If you need to edit text quite a bit, it makes sense to make it efficient.

    I personally recommend trying to learn Vim alongside with another editor, or using a GUI frontend like GVim.

    Replace Vim or GVim with any editor of your choice.

    --
    http://sourcemage.org/ - Have fun :)
  29. Re:Just using VIM by Anonymous Coward · · Score: 5, Funny

    Not really a vim trick, but I always liked to create a file in the / directory named README. The file just contained one line: "ERROR: can not open file README" When someone cats it, they get the error message. Pretty cute until they vi it and figure it out.

  30. Re::Sex by pimpimpim · · Score: 5, Funny
    it give you a file exploring pane above the buffer you are currently using.

    If only my parents had told me earlier.

    --
    molmod.com - computing tips from a molecular modeling
  31. Re:Just using VIM by Constantine+XVI · · Score: 5, Interesting

    main utility of vi is that I know it's going to be there in any Linux enviroment (and I suspect Unix in general).

    vi is part of the Single UNIX Specification, so anything passing itself off as UNIX must include vi. Even without the spec, it's much, much more universal than emacs, and more powerful than pico/nano.

    --
    "I think an etch-a-sketch with an ethernet port would beat IE7 in web standards compliance."
  32. Re:Here's a few good ones by James+McGuigan · · Score: 3, Informative

    Actually I fix this one within .bashrc, and create a wrapper function around vim, that detects if the file is editable or not, and asks if you want to prefix an sudo.

    argc () {
            count=0;
            for arg in "$@"; do
                    if [[ ! "$arg" =~ '-' ]]; then count=$(($count+1)); fi;
            done;
            echo $count;
    }

    vi () { if [[ `argc "$@"` > 1 ]]; then /usr/bin/vim $@;
                    elif [ $1 = '' ]; then /usr/bin/vim;
                    elif [ ! -f $1 ] || [ -w $1 ]; then /usr/bin/vim $@;
                    else
                            echo -n "File is readonly. Edit as root? (Y/n): "
                            read -n 1 yn; echo;
                            if [ "$yn" = 'n' ] || [ "$yn" = 'N' ];
                                then /usr/bin/vim $*;
                                else sudo /usr/bin/vim $*;
                            fi
                    fi
                }

  33. Re:Just using VIM by Adam+Hazzlebank · · Score: 5, Interesting

    The one I find really useful is .,+20s/foo/bar/g

    Replace all occurrences in the next 20 lines from the current line only. Great when your editing code and you've realised you used the wrong variable name in that method for example.

  34. Re:Just using VIM by Anonymous Coward · · Score: 5, Funny

    How else am I supposed to get anything done on Windows?

  35. Re:Just using VIM by petard · · Score: 3, Interesting

    Sigh. I'm sure I'm not the only one here... I distinctly remember purchasing my first 9600bps modem. (A real Hayes, no less! I sent them a large manilla SASE and they shipped me the AT command manual for no charge.) I spent a few months mowing every lawn I could to raise the funds for it. Exactly a week after I got it installed and found a couple local BBSes I could connect to at 9600, Hayes shipped the very first 14400bps modem.

    Apart from the nature and amount of labor involved in raising funds, that's been a pattern for so many equipment purchases since. That was the very first time I bought something so close to the release of the new shiny, though :-)

    --
    .sig: file not found
  36. Re:Just using VIM by rrohbeck · · Score: 4, Funny

    * leaves himself a note to get cygwin installed on the home system

    How can I install that on Ubuntu?

    VMware.

  37. Re:Just using VIM by WoLpH · · Score: 3, Informative

    It's quite easy

    1. ^V for block select
    2. Select the lines you want (10j for the next 10 lines)
    3. I for insert mode
    4. Type the # or whatever you want to prefix
    5. <esc>
  38. Re:Just using VIM by ppc_digger · · Score: 4, Funny

    He said an editor, not an operating system.

    --
    Of all major operating systems, UNIX is the only one originally meant for gaming.
  39. Re:Just using VIM by Smeagel · · Score: 4, Insightful

    You do realize you can bind macros to keys in vi too? I've never understood this absurd argument from emacs people..