解决source insight输入中文间距大,删除键Del键左右方向光标半个汉字的问题
来源:互联网 发布:ubuntu alt 指令 编辑:程序博客网 时间:2024/06/06 12:23
在默认情况下,往Source Insight里输入中文,字间距相当的大,下面将帮助你解决这个问题。具体设置如下:
1.Options->Style Properties
2. 在左边Style Name下找到Comment Multi Line和Comment.在其右边对应的Font属性框下的Font Name中选“Pick...” 设置为宋体、常规、小四。确定,退回Style Properties界面,Size设为10。最后设置Clolors框下Foreground,点“Pick...”选择一种自己喜欢的颜色就OK了。
3.完成
Source Insight3 中文操作(左右键、删除和后退键)支持宏:
解决方法:
1.打开 Project→Open Project,打开Base项目;
2.复制下面的宏代码段复制粘贴到utils.em文件的最后(原有内容留着不动),使其添加入Base项目;
3.重启SourceInsight;
4.Options→Key Assignments,将Marco: SuperBackspace绑定到BackSpace键;
5.同样的操作Del键和左右键,分别绑定相应的键位。
下面是宏代码,可以整个拷贝,附加到utils.em文件的最后
//1、后退键/** 代替SourceInsight原有的Backspace功能(希望如此)* 增加了对双字节汉字的支持,在删除汉字的时候也能同时删除汉字的高字节而缓解半个汉字问题* 能够对光标在汉字中间的情况进行自动修正* This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/macro SuperBackspace(){ hwnd = GetCurrentWnd(); hbuf = GetCurrentBuf(); if (hbuf == 0) stop; // empty buffer // get current cursor postion ipos = GetWndSelIchFirst(hwnd); // get current line number ln = GetBufLnCur(hbuf); if ((GetBufSelText(hbuf) != "") || (GetWndSelLnFirst(hwnd) != GetWndSelLnLast(hwnd))) { // sth. was selected, del selection SetBufSelText(hbuf, " "); // stupid & buggy sourceinsight :( // del the " " SuperBackspace(1); stop; } // copy current line text = GetBufLine(hbuf, ln); // get string length len = strlen(text); // if the cursor is at the start of line, combine with prev line if (ipos == 0 || len == 0) { if (ln <= 0) stop; // top of file ln = ln - 1; // do not use "ln--" for compatibility with older versions prevline = GetBufLine(hbuf, ln); prevlen = strlen(prevline); // combine two lines text = cat(prevline, text); // del two lines DelBufLine(hbuf, ln); DelBufLine(hbuf, ln); // insert the combined one InsBufLine(hbuf, ln, text); // set the cursor position SetBufIns(hbuf, ln, prevlen); stop; } num = 1; // del one char if (ipos >= 1) { // process Chinese character i = ipos; count = 0; while (AsciiFromChar(text[i - 1]) >= 160) { i = i - 1; count = count + 1; if (i == 0) break; } if (count > 0) { // I think it might be a two-byte character num = 2; // This idiot does not support mod and bitwise operators if ((count / 2 * 2 != count) && (ipos < len)) ipos = ipos + 1; // adjust cursor position } } // keeping safe if (ipos - num < 0) num = ipos; // del char(s) text = cat(strmid(text, 0, ipos - num), strmid(text, ipos, len)); DelBufLine(hbuf, ln); InsBufLine(hbuf, ln, text); SetBufIns(hbuf, ln, ipos - num); stop;}//参考上面以及SourceInsight中的chm帮助文档;//有缺点:(1)移动箭头也会记录到历史操作步骤,应该能够避免这些操作被记录;(2)函数没有整理,有冗余;//2、删除键——SuperDelete.emmacro SuperDelete(){ hwnd = GetCurrentWnd(); hbuf = GetCurrentBuf(); if (hbuf == 0) stop; // empty buffer // get current cursor postion ipos = GetWndSelIchFirst(hwnd); // get current line number ln = GetBufLnCur(hbuf); if ((GetBufSelText(hbuf) != "") || (GetWndSelLnFirst(hwnd) != GetWndSelLnLast(hwnd))) { // sth. was selected, del selection SetBufSelText(hbuf, " "); // stupid & buggy sourceinsight :( // del the " " SuperDelete(1); stop; } // copy current line text = GetBufLine(hbuf, ln); // get string length len = strlen(text); if (ipos == len || len == 0) {totalLn = GetBufLineCount (hbuf);lastText = GetBufLine(hBuf, totalLn-1);lastLen = strlen(lastText); if (ipos == lastLen)// end of file stop; ln = ln + 1; // do not use "ln--" for compatibility with older versions nextline = GetBufLine(hbuf, ln); nextlen = strlen(nextline); // combine two lines text = cat(text, nextline); // del two lines DelBufLine(hbuf, ln-1); DelBufLine(hbuf, ln-1); // insert the combined one InsBufLine(hbuf, ln-1, text); // set the cursor position SetBufIns(hbuf, ln-1, len); stop; } num = 1; // del one char if (ipos > 0) { // process Chinese character i = ipos; count = 0; while (AsciiFromChar(text[i-1]) >= 160) { i = i - 1; count = count + 1; if (i == 0) break; } if (count > 0) { // I think it might be a two-byte character num = 2; // This idiot does not support mod and bitwise operators if (((count / 2 * 2 != count) || count == 0) && (ipos < len-1)) ipos = ipos + 1; // adjust cursor position }// keeping safeif (ipos - num < 0) num = ipos; } else {i = ipos;count = 0;while(AsciiFromChar(text[i]) >= 160) { i = i + 1; count = count + 1; if(i == len-1) break;}if(count > 0) { num = 2;} } text = cat(strmid(text, 0, ipos), strmid(text, ipos+num, len)); DelBufLine(hbuf, ln); InsBufLine(hbuf, ln, text); SetBufIns(hbuf, ln, ipos); stop;}//3、左移键——SuperCursorLeft.emmacro IsComplexCharacter(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) return 0;//当前位置pos = GetWndSelIchFirst(hwnd);//当前行数ln = GetBufLnCur(hbuf);//得到当前行text = GetBufLine(hbuf, ln);//得到当前行长度len = strlen(text);//从头计算汉字字符的个数if(pos > 0){ i=pos; count=0; while(AsciiFromChar(text[i-1]) >= 160) { i = i - 1; count = count+1; if(i == 0) break; } if((count/2)*2==count|| count==0) return 0; else return 1;}return 0;}macro moveleft(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) stop; // empty bufferln = GetBufLnCur(hbuf);ipos = GetWndSelIchFirst(hwnd);if(GetBufSelText(hbuf) != "" || (ipos == 0 && ln == 0)) // 第0行或者是选中文字,则不移动{ SetBufIns(hbuf, ln, ipos); stop;}if(ipos == 0){ preLine = GetBufLine(hbuf, ln-1); SetBufIns(hBuf, ln-1, strlen(preLine)-1);}else{ SetBufIns(hBuf, ln, ipos-1);}}macro SuperCursorLeft(){moveleft();if(IsComplexCharacter()) moveleft();}//4、右移键——SuperCursorRight.emmacro moveRight(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) stop; // empty bufferln = GetBufLnCur(hbuf);ipos = GetWndSelIchFirst(hwnd);totalLn = GetBufLineCount(hbuf);text = GetBufLine(hbuf, ln); if(GetBufSelText(hbuf) != "") //选中文字{ ipos = GetWndSelIchLim(hwnd); ln = GetWndSelLnLast(hwnd); SetBufIns(hbuf, ln, ipos); stop;}if(ipos == strlen(text)-1 && ln == totalLn-1) // 末行 stop; if(ipos == strlen(text)){ SetBufIns(hBuf, ln+1, 0);}else{ SetBufIns(hBuf, ln, ipos+1);}}macro SuperCursorRight(){moveRight();if(IsComplexCharacter()) // defined in SuperCursorLeft.em moveRight();}//5、shift+右移键——ShiftCursorRight.emmacro IsShiftRightComplexCharacter(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) return 0;selRec = GetWndSel(hwnd);pos = selRec.ichLim;ln = selRec.lnLast;text = GetBufLine(hbuf, ln);len = strlen(text);if(len == 0 || len < pos) return 1;//Msg("@len@;@pos@;");if(pos > 0){ i=pos; count=0; while(AsciiFromChar(text[i-1]) >= 160) { i = i - 1; count = count+1; if(i == 0) break; } if((count/2)*2==count|| count==0) return 0; else return 1;}return 0;}macro shiftMoveRight(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) stop; ln = GetBufLnCur(hbuf);ipos = GetWndSelIchFirst(hwnd);totalLn = GetBufLineCount(hbuf);text = GetBufLine(hbuf, ln); selRec = GetWndSel(hwnd); curLen = GetBufLineLength(hbuf, selRec.lnLast);if(selRec.ichLim == curLen+1 || curLen == 0){ if(selRec.lnLast == totalLn -1) stop; selRec.lnLast = selRec.lnLast + 1; selRec.ichLim = 1; SetWndSel(hwnd, selRec); if(IsShiftRightComplexCharacter()) shiftMoveRight(); stop;}selRec.ichLim = selRec.ichLim+1;SetWndSel(hwnd, selRec);}macro SuperShiftCursorRight(){ if(IsComplexCharacter()) SuperCursorRight();shiftMoveRight();if(IsShiftRightComplexCharacter()) shiftMoveRight();}//6、shift+左移键——ShiftCursorLeft.emmacro IsShiftLeftComplexCharacter(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) return 0;selRec = GetWndSel(hwnd);pos = selRec.ichFirst;ln = selRec.lnFirst;text = GetBufLine(hbuf, ln);len = strlen(text);if(len == 0 || len < pos) return 1;//Msg("@len@;@pos@;");if(pos > 0){ i=pos; count=0; while(AsciiFromChar(text[i-1]) >= 160) { i = i - 1; count = count+1; if(i == 0) break; } if((count/2)*2==count|| count==0) return 0; else return 1;}return 0;}macro shiftMoveLeft(){hwnd = GetCurrentWnd();hbuf = GetCurrentBuf();if (hbuf == 0) stop; ln = GetBufLnCur(hbuf);ipos = GetWndSelIchFirst(hwnd);totalLn = GetBufLineCount(hbuf);text = GetBufLine(hbuf, ln); selRec = GetWndSel(hwnd); //curLen = GetBufLineLength(hbuf, selRec.lnFirst);//Msg("@curLen@;@selRec@");if(selRec.ichFirst == 0){ if(selRec.lnFirst == 0) stop; selRec.lnFirst = selRec.lnFirst - 1; selRec.ichFirst = GetBufLineLength(hbuf, selRec.lnFirst)-1; SetWndSel(hwnd, selRec); if(IsShiftLeftComplexCharacter()) shiftMoveLeft(); stop;}selRec.ichFirst = selRec.ichFirst-1;SetWndSel(hwnd, selRec);}macro SuperShiftCursorLeft(){if(IsComplexCharacter()) SuperCursorLeft();shiftMoveLeft();if(IsShiftLeftComplexCharacter()) shiftMoveLeft();}
转自:http://blog.sina.com.cn/s/blog_628bebe4010137il.html
- 解决source insight输入中文间距大,删除键Del键左右方向光标半个汉字的问题
- source insight的中文删除解决办法,以及中文间距大的问题
- Source Insight中文注释字间距过大问题的解决
- Source Insight中文注释字间距过大问题的解决
- Source Insight中文注释字间距过大问题的解决
- 部分解决Source Insight中文输入法打开时输入的乱码问题和自动添加注释
- source insight粘贴时候的光标问题
- Source Insight里输入中文问题
- 解决SourceInsight的半个汉字的问题
- 如何解决source insight中文乱码的问题
- Source Insight里的汉字问题
- Source Insight里的汉字问题
- source Insight 解决中文注释乱码问题
- source insight解决中文乱码问题
- source insight的中文删除解决办法superbackspace
- source insight的中文删除解决办法superbackspace
- 解决source insight 的相对路径问题
- 解决数据库系统中存在的半个汉字问题
- 《学习Qt之路2》笔记:QT自定义信号槽
- 一、 FreeMarker简介
- Linux Shell 之定时检测Tomcat运行
- POJ——1221(dp)
- Available Memory is low
- 解决source insight输入中文间距大,删除键Del键左右方向光标半个汉字的问题
- iOS 切换到后台任务执行
- FileUpload控件使用
- 黑马程序员享元设计模式
- ActiveMQ的BlobMessage传输文件示例:完全嵌入式的使用jetty的fileserver
- lab3
- GridView的监听,选择,美化等详解<一>
- Android 高级控件学习--ProgressDialog
- java HashMap 高效遍历