I cannot reproduce your problem but I probably had been having similar problem that breaks undo but I cannot remember it... Maybe it disappeared when something was upgraded. Now I can use scim (with other trouble related to undo but it is not serious). Each versions I am using are scim-1.4.4, scim-anthy-1.0.0, gtk-2.8.17 and Vim7.
Anyway, it can probably be avoid using OverTheSpot(?) instead of OnTheSpot. Execute scim-setup and select "FrontEnd->Global Setup" and uncheck "Embed Preedit String into client window". (perhaps these are "FrontEnd->XWindow" and "On The Spot") (By the way, I couldn't use Input Method on GTK1 GUI. Preedit is shown but cannot Commit). Although this is bad solution, you can use this script to use scim. I am using this usually. http://tokyo.cool.ne.jp/hopper2/scim.vim http://tokyo.cool.ne.jp/hopper2/vimscim.cpp This is very experimental code. This requires scim-1.4 and Vim7. Installation: 1. compile FreeBSD6: $ g++ -shared -o vimscim.so -I/usrX11R6/incluce/scim-1.0 \ -D__STDC_ISO_10646__ vimscim.cpp -L/usr/X11R6/lib -lscim-1.0 Fedora Core 5: you need to install scim-devel pkg and use libstdc++.so.7. $ g++-libstdc++-so_7 -shared -o vimscim.so \ `pkg-config --cflags --libs scim` -fPIC vimscim.cpp 2. cp scim.vim vimscim.so ~/.vim/keymap Usage: Set Language and Input Engine. If omitted, default is used. :let g:scim_lang = "ja_JP" :let g:scim_engine = "Anthy" :set keymap=scim Other settings are not needed including to run "scim -d" and to set Environment Variables. Other way, SKK (Simple Kana to Kanji conversion program) is available for Japanese inputting. SKK is a popular Input Method especially in Emacs. There are two implementations written in pure VimScript. You can find details of SKK at http://openlab.jp/skk/ (I don't know it well). This is written by Anonymouse and hosted by MURAOKA Taro. http://www.kaoriya.net/testdir/skkvim-20060314.zip This is written by Yasuhiro Matsumoto. http://hp.vector.co.jp/authors/VA020411/Vim/scripts/skkim.vim --- off topic --- My trouble is: When using GTK2 GUI and Input Method was used and character conversion was performed, arrow_used is set to TRUE by im_correct_cursor(). So after character was committed into input buffer and before input the character actually, u_sync() is called from may_sync_undo(). And u_sync() makes new undo because preedit already ended and im_is_preediting() returns FALSE. This patch may fix it. But I don't know other influence and this should not fix your problem. *** src/edit.c.orig Thu May 11 20:18:20 2006 --- src/edit.c Thu May 11 20:18:45 2006 *************** *** 5937,5942 **** --- 5937,5946 ---- start_arrow(end_insert_pos) pos_T *end_insert_pos; /* can be NULL */ { + #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK) + if (im_is_preediting()) + return; + #endif if (!arrow_used) /* something has been inserted */ { AppendToRedobuff(ESC_STR); -- Yukihiro Nakadaira <[EMAIL PROTECTED]>