*arabic.txt*	For Vim version 7.2.  Last change: 2005 Mar 29


		  VIM REFERENCE MANUAL	  by Nadim Shaikli


Arabic Language support (options & mappings) for Vim		*Arabic*

{Vi does not have any of these commands}

								*E800*
In order to use right-to-left and Arabic mapping support, it is
necessary to compile VIM with the |+arabic| feature.

These functions have been created by Nadim Shaikli <nadim-at-arabeyes.org>

It is best to view this file with these settings within VIM's GUI: >

	:set encoding=utf-8
	:set arabicshape


Introduction
------------
Arabic is a rather demanding language in which a number of special
features are required.	Characters are right-to-left oriented and
ought to appear as such on the screen (i.e. from right to left).
Arabic also requires shaping of its characters, meaning the same
character has a different visual form based on its relative location
within a word (initial, medial, final or stand-alone).	Arabic also
requires two different forms of combining and the ability, in
certain instances, to either superimpose up to two characters on top
of another (composing) or the actual substitution of two characters
into one (combining).  Lastly, to display Arabic properly one will
require not only ISO-8859-6 (U+0600-U+06FF) fonts, but will also
require Presentation Form-B (U+FE70-U+FEFF) fonts both of which are
subsets within a so-called ISO-10646-1 font.

The commands, prompts and help files are not in Arabic, therefore
the user interface remains the standard Vi interface.


Highlights
----------
o  Editing left-to-right files as in the original VIM hasn't changed.

o  Viewing and editing files in right-to-left windows.	 File
   orientation is per window, so it is possible to view the same
   file in right-to-left and left-to-right modes, simultaneously.

o  No special terminal with right-to-left capabilities is required.
   The right-to-left changes are completely hardware independent.
   Only Arabic fonts are necessary.

o  Compatible with the original VIM.   Almost all features work in
   right-to-left mode (there are liable to be bugs).

o  Changing keyboard mapping and reverse insert modes using a single
   command.

o  Toggling complete Arabic support via a single command.

o  While in Arabic mode, numbers are entered from left to right.  Upon
   entering a none number character, that character will be inserted
   just into the left of the last number.

o  Arabic keymapping on the command line in reverse insert mode.

o  Proper Bidirectional functionality is possible given VIM is
   started within a Bidi capable terminal emulator.


Arabic Fonts						*arabicfonts*
------------

VIM requires monospaced fonts of which there are many out there.
Arabic requires ISO-8859-6 as well as Presentation Form-B fonts
(without Form-B, Arabic will _NOT_ be usable).	It is highly
recommended that users search for so-called 'ISO-10646-1' fonts.
Do an Internet search or check www.arabeyes.org for further
info on where to attain the necessary Arabic fonts.


Font Installation
-----------------

o  Installation of fonts for X Window systems (Unix/Linux)

   Depending on your system, copy your_ARABIC_FONT file into a
   directory of your choice.  Change to the directory containing
   the Arabic fonts and execute the following commands:

     %	mkfontdir
     %	xset +fp path_name_of_arabic_fonts_directory


Usage
-----
Prior to the actual usage of Arabic within VIM, a number of settings
need to be accounted for and invoked.

o  Setting the Arabic fonts

   +  For VIM GUI set the 'guifont' to your_ARABIC_FONT.  This is done
      by entering the following command in the VIM window.
>
		:set guifont=your_ARABIC_FONT
<
      NOTE: the string 'your_ARABIC_FONT' is used to denote a complete
	    font name akin to that used in Linux/Unix systems.
	    (e.g. -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1)

      You can append the 'guifont' set command to your .vimrc file
      in order to get the same above noted results.  In other words,
      you can include ':set guifont=your_ARABIC_FONT' to your .vimrc
      file.

   +  Under the X Window environment, you can also start VIM with
      '-fn your_ARABIC_FONT' option.

o  Setting the appropriate character Encoding
   To enable the correct Arabic encoding the following command needs
   to be appended,
>
		:set encoding=utf-8
<
   to your .vimrc file (entering the command manually into you VIM
   window is highly discouraged).  In short, include ':set
   encoding=utf-8' to your .vimrc file.

   Attempts to use Arabic without UTF-8 will result the following
   warning message,

								*W17*  >
     Arabic requires UTF-8, do ':set encoding=utf-8'

o  Enable Arabic settings [short-cut]

   In order to simplify and streamline things, you can either invoke
   VIM with the command-line option,

     % vim -A my_utf8_arabic_file ...

   or enable 'arabic' via the following command within VIM
>
		:set arabic
<
   The two above noted possible invocations are the preferred manner
   in which users are instructed to proceed.  Baring an enabled 'termbidi'
   setting, both command options:

     1. set the appropriate keymap
     2. enable the deletion of a single combined pair character
     3. enable rightleft    mode
     4. enable rightleftcmd mode (affecting the command-line)
     5. enable arabicshape  mode (do visual character alterations)

   You may also append the command to your .vimrc file and simply
   include ':set arabic' to it.

   You are also capable of disabling Arabic support via
>
		:set noarabic
<
   which resets everything that the command had enabled without touching
   the global settings as they could affect other possible open buffers.
   In short the 'noarabic' command,

     1. resets to the alternate keymap
     2. disables the deletion of a single combined pair character
     3. disables rightleft mode

   NOTE: the 'arabic' command takes into consideration 'termbidi' for
	 possible external bi-directional (bidi) support from the
	 terminal ("mlterm" for instance offers such support).
	 'termbidi', if available, is superior to rightleft support
	 and its support is preferred due to its level of offerings.
	 'arabic' when 'termbidi' is enabled only sets the keymap.

   If, on the other hand, you'd like to be verbose and explicit and
   are opting not to use the 'arabic' short-cut command, here's what
   is needed (i.e. if you use ':set arabic' you can skip this section) -

   +  Arabic Keymapping Activation

      To activate the Arabic keymap (i.e. to remap your English/Latin
      keyboard to look-n-feel like a standard Arabic one), set the
      'keymap' command to "arabic".  This is done by entering
>
		:set keymap=arabic
<
      in your VIM window.  You can also append the 'keymap' set command to
      your .vimrc file.  In other words, you can include ':set keymap=arabic'
      to your .vimrc file.

      To turn toggle (or switch) your keymapping between Arabic and the
      default mapping (English), it is advised that users use the 'CTRL-^'
      key press while in insert (or add/replace) mode.	The command-line
      will display your current mapping by displaying an "Arabic" string
      next to your insertion mode (e.g. -- INSERT Arabic --) indicating
      your current keymap.

   +  Arabic deletion of a combined pair character

      By default VIM has the 'delcombine' option disabled.  This option
      allows the deletion of ALEF in a LAM_ALEF (LAA) combined character
      and still retain the LAM (i.e. it reverts to treating the combined
      character as its natural two characters form -- this also pertains
      to harakat and their combined forms).  You can enable this option
      by entering
>
		:set delcombine
<
      in our VIM window.  You can also append the 'delcombine' set command
      to your .vimrc file.  In other words, you can include ':set delcombine'
      to your .vimrc file.

   +  Arabic right-to-left Mode

      By default VIM starts in Left-to-right mode.  'rightleft' is the
      command that allows one to alter a window's orientation - that can
      be accomplished via,

      - Toggling between left-to-right and right-to-left modes is
	accomplished through ':set rightleft' and ':set norightleft'.

      - While in Left-to-right mode, enter ':set rl' in the command line
	('rl' is the abbreviation for rightleft).

      - Put the ':set rl' line in your '.vimrc' file to start Vim in
	right-to-left mode permanently.

   +  Arabic right-to-left command-line Mode

      For certain commands the editing can be done in right-to-left mode.
      Currently this is only applicable to search commands.

      This is controlled with the 'rightleftcmd' option.  The default is
      "search", which means that windows in which 'rightleft' is set will
      edit search commands in right-left mode.	To disable this behavior,
>
		:set rightleftcmd=
<
      To enable right-left editing of search commands again,
>
		:set rightleftcmd&
<
   +  Arabic Shaping Mode

      To activate the required visual characters alterations (shaping,
      composing, combining) which the Arabic language requires, enable
      the 'arabicshape' command.  This is done by entering
>
		:set arabicshape
<
      in our VIM window.  You can also append the 'arabicshape' set
      command to your .vimrc file.  In other words, you can include
      ':set arabicshape' to your .vimrc file.


Keymap/Keyboard						*arabickeymap*
---------------

The character/letter encoding used in VIM is the standard UTF-8.
It is widely discouraged that any other encoding be used or even
attempted.

Note: UTF-8 is an all encompassing encoding and as such is
      the only supported (and encouraged) encoding with
      regard to Arabic (all other proprietary encodings
      should be discouraged and frowned upon).

o  Keyboard

   +  CTRL-^ in insert/replace mode toggles between Arabic/Latin mode

   +  Keyboard mapping is based on the Microsoft's Arabic keymap (the
      defacto standard in the Arab world):

  +---------------------------------------------------------------------+
  |!   |@   |#   |$   |%   |^   |&   |*   |(   |)   |_   |+   ||   |~  ّ |
  |1 ١ |2 ٢ |3 ٣ |4 ٤ |5 ٥ |6 ٦ |7 ٧ |8 ٨ |9 ٩ |0 ٠ |-   |=   |\   |` ذ |
  +---------------------------------------------------------------------+
       |Q  َ |W  ً |E  ُ |R  ٌ |T لإ |Y إ |U ` |I ÷ |O x |P ؛ |{ < |} > |
       |q ض |w ص |e ث |r ق |t ف |y غ |u ع |i ه |o خ |p ح |[ ج |] د |
       +-----------------------------------------------------------+
	 |A  ِ |S  ٍ |D [ |F ] |G لأ |H أ |J ـ |K ، |L / |:   |"   |
	 |a ش |s س |d ي |f ب |g ل |h ا |j ت |k ن |l م |; ك |' ط |
	 +------------------------------------------------------+
	   |Z ~ |X  ْ |C { |V } |B لآ |N آ |M ' |< , |> . |? ؟ |
	   |z ئ |x ء |c ؤ |v ر |b لا |n ى |m ة |, و |. ز |/ ظ |
	   +-------------------------------------------------+

Restrictions
------------

o  VIM in its GUI form does not currently support Bi-directionality
   (i.e. the ability to see both Arabic and Latin intermixed within
   the same line).


Known Bugs
----------

There is one known minor bug,

 1. If you insert a haraka (e.g. Fatha (U+064E)) after a LAM (U+0644)
    and then insert an ALEF (U+0627), the appropriate combining will
    not happen due to the sandwiched haraka resulting in something
    that will NOT be displayed correctly.

    WORK-AROUND: Don't include harakats between LAM and ALEF combos.
		 In general, don't anticipate to see correct visual
		 representation with regard to harakats and LAM+ALEF
		 combined characters (even those entered after both
		 characters).  The problem noted is strictly a visual
		 one, meaning saving such a file will contain all the
		 appropriate info/encodings - nothing is lost.

No other bugs are known to exist.

 vim:tw=78:ts=8:ft=help:norl:
