This is a draft, quarantined as a subpage of my own userpage until (and if) it is ready to face the world. Feel free to edit it.
This tip assumes you're using UTF8. If you aren't, you should.
If you use vim to write documents in several languages, it is not unlikely that you'd like to do certain things whenever a foreign language document is loaded. Unfortunately, there is no one way to determine a document's "language". This tip suggests determening a document's language based on the very first letter in it.
First, you will need to add to your .vimrc the Unicode code-to-script-name function.
Second, add the following function to your .vimrc:
" Gets code of first multibyte letter " Returns -1 if no letter found function s:GetFirstMultibyteLetterCode() let l:save_cursor = getpos(".") 0 let l:first_line = search("\\K", 'c') if (l:first_line!=0) let l:temp_a = @a normal! "ayl let l:first_letter = char2nr(@a) let @a = l:temp_a else let l:first_letter = -1 endif call setpos('.', l:save_cursor) return l:first_letter endfunction
Third, add something like the following to your .vimrc (replace "Hebrew" with your script of choice):
" Automatically detect language function s:DetectLanguage () let l:first_letter_code = s:GetFirstMultibyteLetterCode() if (l:first_letter_code==-1) | return | endif if (UnicodeCodeToScriptName(l:first_letter_code)=="Hebrew") " do your Hebrew stuff " ... endif endfunction autocmd BufRead *.txt call s:DetectLanguage()
And that's that.
What Hebrew stuff might you be inclined to do? Well, if you edit Hebrew or Arabic documents (or any other RTL language), you might like:
Note that another way to achieve this, without bothering with any of the above, is using modelines. You can add the following line, for instance, to any given file:
vim: set rightleft:
There's got to be a better way to implement s:GetFirstMultibyteLetterCode(). I'll look into this. tlgrok 23:39, 26 January 2009 (UTC)