Vim

> Quentingaultier
> DEV

Open in iTerm Vim from Finder - The Pug Automatic. When I double-click a code file in Finder, I want it to open in Vim in a terminal.

Not in MacVim. Not in some lesser editor. There’s plenty of prior work, but nothing worked well for me on OS X 10.10 Yosemite, so I rolled my own. The end result: double-clicking a file opens a new iTerm window with the file opened in Vim.
Vim anti-patterns. The benefits of getting to grips with Vim are immense in terms of editing speed and maintaining your “flow” when you’re on a roll, whether writing code, poetry, or prose, but because the learning curve is so steep for a text editor, it’s very easy to retain habits from your time learning the editor that stick with you well into mastery.

Because Vim makes you so fast and fluent, it’s especially hard to root these out because you might not even notice them, but it’s worth it. Here I’ll list some of the more common ones. Moving one line at a time If you have to move more than a couple of lines, moving one line at a time by holding down j or k is inefficient.

There are many more ways to move vertically in Vim. .
{ — Move to start of previous paragraph or code block.} — Move to end of next paragraph or code block.Ctrl+F — Move forward one screenful.Ctrl+B — Move backward one screenful. Moving one character at a time Moving wordwise with w, W, b, B, e, and E is better, too. Y/search<Enter> y? d2wi. Habit breaking, habit making. Moving your Vim cursor around using the arrow keys is a bad habit, and like many bad habits it’s a difficult one to break!

Putting these lines into your vimrc can help: noremap <Up><NOP> noremap <Down><NOP> noremap <Left><NOP> noremap <Right><NOP> This snippet causes each of the arrow keys to execute no operation, or in other words: it disables them. Next time you move your hand to the arrow keys you’ll find that nothing happens when you press them.
Change Cursor in Vim in iTerm2. 9 Mar, 2014Tags: vim, OS X.

A neat trick I stumbled over in iTerm2’s documentation is that one can change the cursor shape from the block (default) to a vertical bar. This is great to do for Vim’s insert mode where the cursor conceptually is between characters. Adding the following to ~/.vimrc will change the cursor to a vertical bar in insert mode and keep it as a block in the other modes. This should also work in Konsole, as far as I know, so if you use Konsole you should extend/replace the $TERM_PROGRAM check to look for Konsole.

" Change cursor shape between insert and normal mode in iTerm2.app if $TERM_PROGRAM =~ "iTerm" let &t_SI = "\<Esc>]50;CursorShape=1\x7" " Vertical bar in insert mode let &t_EI = "\<Esc>]50;CursorShape=0\x7" " Block in normal mode endif A screenshot of how this looks:
Vim and Ctags. Vim Awesome. Making the clipboard work between iTerm2, tmux, vim and OS X.
Getting copying and pasting to behave sanely when working with the terminal has been a constant struggle, probably ever since I started working with PuTTY, slackware and what must have been Windows 98.

These days my environment consists of OS X 10.10, tmux, iTerm2 and well, Vim has never gone away. Neither have my issues with copy-pasting though. It seems that every time I have a solution, a few months later a cog in the machine changes and breaks the whole set-up again, which then takes me months to fix due to my lazyness. I finally took the time again to look into this, and figured I should share. So this is the December 2014 solution! iTerm2 First: iTerm2. iTerm2 has a setting that allows terminal applications to access the clipboard.

This works through ANSI escape sequences, and you actually want this OFF. So to repeat this, the “Allow clipboard access to terminal apps” must be OFF tmux OS X has two command-line utilities to interact with the clipboard, pbcopy and pbpaste.
Sculpting text with regex, grep, sed and awk. Theory: Regular languages Many tools for searching and sculpting text rely on a pattern language known as regular expressions.

The theory of regular languages underpins regular expressions. (Caveat: Some modern "regular" expression systems can describe irregular languages, which is why the term "regex" is preferred for these systems.) Regular languages are a class of formal language equivalent in power to those recognized by deterministic finite automata (DFAs) and nondeterministic finite automata (NFAs). [See my post on converting regular expressions to NFAs.] In formal language theory, a language is a set of strings. For example, {"foo"} and {"foo", "foobar"} are formal (if small) languages. (Mathematicians don't typically put quotes around a string, preferring to let the fixed-width typewriter font distinguish it as one, but I'm guessing that programmers are more comfortable with the quotes around strings.)