sourceinsight - 完美支持中文注释
来源:互联网 发布:拿破仑全面战争mac 编辑:程序博客网 时间:2024/04/19 15:10
- Project→Open Project,打开Base项目,将文中代码框中的所有内容函数复制到utils.em文件的最后;
- 重启SourceInsight;
- Options→Key Assignments,将下面宏依次与相应按键绑定:
- Marco: SuperBackspace绑定到BackSpace键;
- Marco: SuperCursorLeft绑定到<-键,
- Marco: SuperCursorRight绑定到->键,
- Marco: SuperShiftCursorLeft绑定到Shift+<-,
- Macro: SuperShiftCursorRight绑定到shift+->,
- Macro: SuperDelete绑定到del
- Enjoy
/*======================================================================1、BackSpace后退键======================================================================*/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); //getstring 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;//donot 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 modand 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;}/*======================================================================2、删除键——SuperDelete.em======================================================================*/macro 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); //getstring 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;//donot 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 modand 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)>= 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.em======================================================================*/macro 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.em======================================================================*/macro 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.em======================================================================*/macro 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.em======================================================================*/macro 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();}/*---END---*/
注:解决source insight 中文间距的方法:默认情况下,往Source Insight里输入中文,字间距相当的大,要解决这个问题,具体设置如下:
- Options->Style Properties
- *在左边Style Name下找到Comment Multi Line和Comment.在其右边对应的Font属性框下的
Font Name中选“Pick…” 设置为宋体、常规、小四。确定,退回Style Properties界面,
Size设为10。最后设置Clolors框下Foreground,点“Pick…”选择一种自己喜欢的颜色就OK了。*
0 0
- sourceinsight - 完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- 让Source Insight完美支持中文注释
- sourceinsight 中文支持 解决办法
- sourceinsight注释中文的解决方法
- 让Source Insight完美支持中文注释、中文搜索(转)
- sourceinsight添加中文注释的问题
- SourceInsight 中文注释空格问题(解决)
- SourceInsight中文注释间隔太大解决办法
- eclipse中文注释乱码问题&sourceinsight排版
- python支持中文注释
- vim支持中文注释
- crossdomain.xml的配置详解
- Android进阶——Crash异常捕获并发送到服务器
- Hibernate不能自动建数据表解决办法
- Storm的编程模型与核心组件
- 浏览器discuz论坛搜索卡死解决
- sourceinsight - 完美支持中文注释
- c uintptr_t
- 学习小记 -Flask Web (e) Bug/Errors 修复记录
- Hibernate中利用注解的映射关系
- 程序员怎样选择行业
- 优秀的架构师需要那些专业和软技能?
- js字符串转换成数字与数字转换成字符串的实现方法
- CH5---php从入门到精通
- Mysql数据复制策略