I use the excellent ConnectBot SSH client on my Motorola Droid to SSH into Linux/Unix boxen. Subsequently, I make the mistake of using Vim. Once I enter insert mode in Vim, I realize that the Droid keyboard (and probably every other smartphone keyboard) doesn’t have any key representing the Escape key (that is used in Vim to exit insert mode). There isn’t even a key, AFAIK, representing Control. After being stumped by this multiple times, I now do the following every time before I start editing with Vim when connected in via my Droid:
:imap qq <Esc>
Note that you have to do this *before* you enter insert mode (remember you want a key-sequence to be able to exit insert mode). Once set, I can enter ‘q’ two times in succession to simulate the Escape key action.
- In normal mode, press the key sequence q followed by a. This starts the recording mode (and you should see the word “recording” on the mode-line at the bottom).
- Then enter or exit the insert-mode as many times as you wish, editing text using the keyboard. All the time, vim will keep recording all your keystrokes.
- Finally exit insert-mode (get into normal mode) and then press q. This will stop recording your keystrokes.
- Playback the recorded macro in normal mode, anytime, using the key-sequence @ followed by a. This will playback all the edits you made earlier. Once you’ve referred to a the first time, you can subsequently use @ followed by @ (a double @) to repeat the operation.
Instead of the key a following q when starting recording mode, you can really use any one of the keys 0 to 9 or a to z. The second key is basically a reference to a ‘register’ that sort of names your macro. You can record multiple different macros and play them back by recording to each one of these ‘registers’. The key you use on playback after the @ refers to the appropriate macro recorded.
Recording and playback of keystrokes in Emacs is explained here.
Text files created on Microsoft Windows usually use a combination of Carriage-Return and New-Line (CR-LF or \r\n) to separate lines.
When such text files are opened in Windows using Vim (usually in the Unix mode), the Carriage-Return’s will show up in the file as ^M (CTRL-M) and can be annoying specially when you are going through long text files. Note that though the ^M has two characters, Vim treats them as a single visible control character.
You can delete the ^M’s by moving the cursor over the caret and pressing ‘x’ in the command mode. Alternately, you can use Vim’s substitute command (used for search and replace) to remove all the ^M (CTRL-M) characters in one fell swoop.
To do the substitute action, in command mode, press “:” (colon, without the quotes) to start entering text on the mode-line at the bottom of the window.
Then, enter “1,$s/^M//g” (without the double-quotes) on the mode-line and press Enter. Presto, all your ^M’s are gone.
Do not enter the ^M in the above as a ‘^’ (caret) followed by an ‘M’. Instead, when it is time to enter this character, first press CTRL-Q to enter a mode where control characters can be keyed in and then press CTRL-M. This will actually insert the ^M (CTRL-M) as a special control character with the caret and the M (and which is treated like a single character though visibly it’s two characters).
To summarize, in command mode, type in the following