When using PuTTY to SSH to a Linux server and edit files, I’ve encountered on several occasions where navigating in vim using the cursor (arrow) keys on the keyboard while in insert mode results in control characters and/or new lines being inserted. Here are a couple of ways to rectify the situation.
- Check if the vim command is pointing to the full version of vim or vim tiny.
$ which vim
Some Linux distros link vim to vim tiny. If it’s pointing to the normal vim, skip to step 4, below.
- If you’re using vim tiny and want to continue to do so, then edit /etc/vim/vimrc.tiny and add the command set nocompatible to turn off compatibility mode.
- If you’d rather have the normal vim editor, then install it. After installation, confirm that the vim command points to the correct version and continue with step 4, below.
- Check that /etc/vim/vimrc (or ~/.vimrc) contains the command, set no compatible, to turn off compatibility mode.
That should do it. If you still have trouble, be sure that your terminal is set correctly in PuTTY and on the remote system.
Have another way to fix this issue? Post it in the comments.
A couple of posts ago, I wrote about fixing the incorrect characters that appear in man pages when using PuTTY. If, however, you see a box or rectangle where a character should be, then here’s the solution for that.
Although PuTTY and Cygwin support UTF-8, some fonts have more character coverage than others. In the case of PuTTY on Windows, most of the fixed-width fonts are missing some of the characters that are used in manual pages. As a result, a hollow box will appear in their place.
DejaVu Sans Mono is one fixed-width font that includes the required characters. Switch to it and your man pages will look good once more.
What other fixed-width fonts have good UTF-8 coverage? Share your findings in the comments.
Do you see strange characters on man pages in your Cygwin? After upgrading to Cygwin 1.7, I noticed that the soft hyphens in man pages were replaced with the “â” character. Somehow, the character set wasn’t right. I remember having to deal with this problem several years ago, but couldn’t recall how I solved it. I found some old messages floating around the web going back at least a decade about setting environment variables, locales and whatnot to cure this. Fortunately, the solution turned out to be easy with the latest Cygwin and PuTTY.
As it turns out, Cygwin 1.7 now defaults to using the UTF-8 character set. PuTTY, at least on my system in the US, defaults to ISO-8859-1, a.k.a Latin-1. So, the fix is as follows:
- Open the PuTTY Configuration dialog
- Under the Window category, click on Translation
- In the “Character set translation on received data” section, select UTF-8 in the drop down list box
- Save the configuration
Now man pages look normal again. Of course, if you’ve changed the locale and/or character set in your Cygwin to something other than UTF-8, be sure to set PuTTY’s character set to match.
Are you using a different terminal/ssh program with Cygwin than PuTTY and encountering this? Share the corresponding steps to apply the cure for your terminal emulator in the comments.