mlterm, which supports this. Aside from Emacs' built-in terminal (M-x term) this is the only terminal I've found that supports this (I've tried about 15-20 different ones).
I've found that
mlterm works better than Emacs due to the sceen ratio settings, and you also avoid having to run Vim inside an Emacs session (I'm not even sure that is legally allowed).
Screenshot (it looks ugly unless you open it full size due to scaling in the browser):
It does require some configure love, though. After starting, press Ctrl + middle click anywhere, this will open the configure screen. I set these options
In the Font tab:
- Check "Anti-alias"
- Check "Variable column width"; this is the "key feature" missing from most other terminal emulators
- Set font to "DejaVu Sans Book 16" (or whatever else you prefer)
- Set "screen ratio against font size" width to 60; this lies to programs about the width of the terminal, of you don't do this, you're only using ~50% of the screen size. The best value for this depends on the font used, so experiment a bit...
The Right-click configure screen seems a bit flaky, I also edited my
~/.mlterm/vaafont since this
ISO10646_UCS4_1 = 22,DejaVu Sans 18;21,DejaVu Sans 16;16,DejaVu Sans 16
~/.mlterm/main (these are the settings I set above, plus some personal
type_engine = xft bel_mode = none scrollbar_mode = none fontsize = 22 use_anti_alias = true use_variable_column_width = true line_space = 5 use_multi_column_char = true col_size_of_width_a = 1 screen_width_ratio = 50
There are some artefacts, which are to be expected, but writing emails or posts such as this, it seems to work quite well!
I created an alias in my shell for this:
alias pvim mlterm -e vim
I also created a little function to remove most UI chrome:
fun! WriteMode() " Disable a lot of stuff setlocal nocursorline nocursorcolumn statusline= showtabline=0 laststatus=0 noruler " Hack a right margin with number setlocal number setlocal numberwidth=3 " White text, so it's 'invisible' highlight LineNr ctermfg=15 " If you're using a black background: " highlight LineNr ctermfg=1 endfun
There's also goyo.vim which goes roughly the same, but that didn't work very well for me (too much mucking about with margins). YMMV though.