找回密码
 立即注册
搜索
楼主: eph

[软件] 文本编辑器交流贴

[复制链接]
 楼主| 发表于 2010-6-30 20:12 | 显示全部楼层
vim 有shell script的
cmd.vim 这个国人写的
shell.vim
ov_efly 发表于 2010-6-30 19:52


shell.vim 太老了就没试,cmd.vim 是重定向到一个临时文件执行完才显示出来的,有些执行很久的程序看不到中间过程不踏实啊。
回复

使用道具 举报

     
发表于 2010-6-30 20:26 | 显示全部楼层
符号列表,固定的片段补全,批量注释与反注释,各种注释模板,没见人用啊,不过这些都是是个文本编辑器就会实现的东西
回复

使用道具 举报

发表于 2010-6-30 20:30 | 显示全部楼层
= = 暂时还不能完全习惯VIM~ 用VIM改一点代码可以~
改多了还是习惯用Source Insigned~

Orz 一直想进入全VIM的环境~ 可惜每次都失败~
回复

使用道具 举报

头像被屏蔽
发表于 2010-6-30 20:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2010-6-30 20:39 | 显示全部楼层
http://blog.csdn.net/richardsa/archive/2010/06/10/5661828.aspx 前提是Cygwin
smy20011 发表于 2010-6-30 20:36


Cygwin 我倒是有用,但是同样的程序在 Cygwin 上只有 Windows 下的 80% 左右的速度,还没有虚拟机快
回复

使用道具 举报

     
发表于 2010-6-30 20:48 | 显示全部楼层
要输出在屏幕上同时又保存到log文件中的话,linux下是很容易的,比如make 2>&1 | tee logfile
回复

使用道具 举报

     
发表于 2010-6-30 20:54 | 显示全部楼层
其实vim/emacs style几乎成了两种行业标准,有些文本编辑器提供了这些style供选择,比如slickedit

vim和emacs本身的图形化其实并不是很成功,有时候我要打开一些文件,想用些图形化较高的编辑器,又不高兴开太大型的,就用些轻量级的编辑器打开,比如geany
回复

使用道具 举报

 楼主| 发表于 2010-6-30 21:05 | 显示全部楼层
要输出在屏幕上同时又保存到log文件中的话,linux下是很容易的,比如make 2>&1 | tee logfile
henvelleng 发表于 2010-6-30 20:48


顺着这个思路找到了 tee.py :http://xialulee.spaces.live.com/ ... ACFA82DB!2030.entry
回复

使用道具 举报

头像被屏蔽
发表于 2010-6-30 21:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-7-1 00:02 | 显示全部楼层
shell.vim 太老了就没试,cmd.vim 是重定向到一个临时文件执行完才显示出来的,有些执行很久的程序看不到中间过程不踏实啊。
eph 发表于 2010/6/30 20:12

试试看命名管道?
这东西Win32 API也有
回复

使用道具 举报

 楼主| 发表于 2010-7-1 00:14 | 显示全部楼层
本帖最后由 eph 于 2010-7-1 01:28 编辑

已经成功了,虽然还不完美(只有接受到换行或者超过 256 个字符才能更新):

tee.py (简化版)
import sys
fs = [sys.stdout, open(sys.argv[1], \'w\')]
data = sys.stdin.readline(256)
while data:
    for f in fs: f.write(data)
    data = sys.stdin.readline(256)
折腾了一天的成果
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
source $VIMRUNTIME/mswin.vim
behave mswin

set diffexpr=MyDiff()
function MyDiff()
  let opt = \'-a --binary \'
  if &diffopt =~ \'icase\' | let opt = opt . \'-i \' | endif
  if &diffopt =~ \'iwhite\' | let opt = opt . \'-b \' | endif
  let arg1 = v:fname_in
  if arg1 =~ \' \' | let arg1 = \'\\"\' . arg1 . \'\\"\' | endif
  let arg2 = v:fname_new
  if arg2 =~ \' \' | let arg2 = \'\\"\' . arg2 . \'\\"\' | endif
  let arg3 = v:fname_out
  if arg3 =~ \' \' | let arg3 = \'\\"\' . arg3 . \'\\"\' | endif
  let eq = \'\'
  if $VIMRUNTIME =~ \' \'
    if &sh =~ \'\\<cmd\'
      let cmd = \'\\"\\"\' . $VIMRUNTIME . \'\\diff\\"\'
      let eq = \'\\"\'
    else
      let cmd = substitute($VIMRUNTIME, \' \', \'\\" \', \'\') . \'\\diff\\"\'
    endif
  else
    let cmd = $VIMRUNTIME . \'\\diff\'
  endif
  silent execute \'!\' . cmd . \' \' . opt . arg1 . \' \' . arg2 . \' > \' . arg3 . eq
endfunction

\\" backup
set backup
set backupdir=D:\\\\Backup\\\\Vim
autocmd BufWritePre * let &backupext = strftime(\\".%y%m%d-%H%M%S\\")

\\" swap file
set directory=%TEMP%

\\" font
set guifont=YaHei\\ Consolas\\ Hybrid:h10

\\" python, see http://www.vex.net/~x/python_and_vim.html
filetype plugin indent on
autocmd FileType python setlocal expandtab smarttab shiftwidth=4 softtabstop=4
let g:pydiction_location = \'C:\\eph\\Lib\\vim72\\misc\\pydiction\'

\\" wrap
set nowrap

\\" fullscreen
if has(\'gui_running\') && has(\\"win32\\")
  autocmd GUIEnter * simalt ~x
endif

\\" line number
set number
highlight LineNr guifg=#BBBBBB guibg=#EEEEEE gui=bold

\\" horizontal scroll bar
set guioptions+=b

\\" no toolbox
set guioptions-=T

\\" close tab
map <F4> :tabclose<CR>
imap <F4> <ESC>:tabclose<CR>
vmap <F4> <ESC>:tabclose<CR>

\\" run
function RunCode(state)
  exec \\"w\\"
  let tmp_file = $TEMP . \\"\\\\eph_gvim_\\" . strftime(\\"%y%m%d-%H%M%S\\")
  if &filetype == \\"python\\"
    exec \\"silent !python -O % 2>&1 | tee.py \\" . tmp_file
  elseif &filetype == \\"c\\" || &filetype == \\"cpp\\"
    if a:state == 0
      exec \\"silent !\\\\"vcvars64.bat & cl % /Fe%<.exe\\\\" 2>&1 | tee.py \\" . tmp_file
    elseif a:state == 1
      exec \\"silent !%<.exe 2>&1 | tee.py \\" . tmp_file
    endif
  elseif &filetype == \\"java\\"
    exec \\"silent !javac % 2>&1 | tee.py \\" . tmp_file
  endif
  exec \\"tabe \\" . tmp_file  
endfunction
map <F5> :call RunCode(0)<CR>
imap <F5> <ESC>:call RunCode(0)<CR>
vmap <F5> <ESC>:call RunCode(0)<CR>
map <F6> :call RunCode(1)<CR>
imap <F6> <ESC>:call RunCode(1)<CR>
vmap <F6> <ESC>:call RunCode(1)<CR>

\\" eregex.vim
nnoremap / :M/
nnoremap ,/ /

\\" mru.vim
let MRU_File = \'C:\\eph\\Lib\\vim72\\misc\\mru_files\'

\\" vcscommand.vim
function SaveAndCommit()
  exec \\"w\\"
  exec \\"VCSCommit[\\" . strftime(\\"%y%m%d-%H%M%S\\") . \\"]\\"
endfunction
map <F12> :call SaveAndCommit()<CR><CR>
imap <F12> <ESC>:call SaveAndCommit()<CR><CR>
vmap <F12> <ESC>:call SaveAndCommit()<CR><CR>
不行了,要干正事去了
回复

使用道具 举报

发表于 2010-7-1 09:12 | 显示全部楼层
vimer textmater
以及emacs 初心者飘过
回复

使用道具 举报

发表于 2010-7-1 17:56 | 显示全部楼层
我不明白的是,在vim里实现Shell究竟是为了干啥?
都已经要上Cygwin了,用mintty很直接啊,最多再加个screen
回复

使用道具 举报

头像被屏蔽
发表于 2010-7-1 18:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-7-1 18:30 | 显示全部楼层
我不明白的是,在vim里实现Shell究竟是为了干啥?
都已经要上Cygwin了,用mintty很直接啊,最多再加个screen
ticat 发表于 2010/7/1 17:56

非GUI的vim在输入中文时完全不给力
回复

使用道具 举报

 楼主| 发表于 2010-7-1 18:42 | 显示全部楼层
我不明白的是,在vim里实现Shell究竟是为了干啥?
都已经要上Cygwin了,用mintty很直接啊,最多再加个screen
ticat 发表于 2010-7-1 17:56


为了快捷键?
回复

使用道具 举报

     
发表于 2010-7-1 20:51 | 显示全部楼层
vim输入中文的时候调的就是系统的输入法啊,shelll的快捷键style一般至少都支持vim style和emacs style两种
回复

使用道具 举报

头像被屏蔽
     
发表于 2010-7-1 21:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-7-1 21:53 | 显示全部楼层
JEE看你程度   
大的我习惯IDE 方便不折腾
回复

使用道具 举报

发表于 2010-7-1 22:52 | 显示全部楼层
本帖最后由 鸡蛋灌饼 于 2010-7-1 22:54 编辑
vim输入中文的时候调的就是系统的输入法啊,shelll的快捷键style一般至少都支持vim style和emacs style两种
henvelleng 发表于 2010/7/1 20:51

没那么容易
非gui的vim不能在退出编辑模式时禁用IME或切到英文输入
Windows下的禁用IME功能比较稳定(但是就算这样,在撞见MSPY2010时也吃瘪了,逼着我自己改代码)
Linux下完全要看RP了,我这里的情况是禁用可以,再次进入编辑模式时不会恢复输入法状态

另外gVim的对默认寄存器的复制/粘贴功能是直接修改剪贴板的,这是个很好用的功能,特别适合在多个gVim间交换数据。
回复

使用道具 举报

     
发表于 2010-7-2 00:27 | 显示全部楼层
gvim基本不用

非编辑模式下输入法照样出中文只是理所当然的不能编辑到文本上,这个是正常的,按shift将输入法切到英文模式就和没开输入法一样了,编辑模式和非编辑模式一切正常,在编辑模式下也可以用shift再切回中文模式。我这里是ubuntu10.04,ibus平台的老搜狗云

多文件之间的复制粘贴,一般是这样,在a文件中先用mark定义需复制的段落的首尾,写入tmp文件,然后在b文件中read出来
举例:
在a文件中
目标段落起始行处输入ma
末尾行处输入mb
然后:\'a,\'b w /tmp/p

在b文件中
移动到粘贴处输入:r /tmp/p

如果是从系统剪贴板直接复制的话,直接按组合键shift + insert即可
回复

使用道具 举报

     
发表于 2010-7-2 00:29 | 显示全部楼层
textmate
回复

使用道具 举报

头像被屏蔽
发表于 2010-7-2 08:42 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2010-7-2 08:52 | 显示全部楼层
vim和emacs在console下才是最强编辑器,GUI下并不方便

用这俩编辑器一定要折腾配置+配合自制小程序才能爽,比较适合公司里用
回复

使用道具 举报

发表于 2010-7-2 08:58 | 显示全部楼层
textmate
風舞雪 发表于 2010-7-2 00:29

到第三页才出现 ....
最近折腾redcar
可以哟
回复

使用道具 举报

     
发表于 2010-7-2 13:09 | 显示全部楼层
vim和emacs在console下才是最强编辑器,GUI下并不方便

用这俩编辑器一定要折腾配置+配合自制小程序才能爽,比较适合公司里用
dazzle 发表于 2010-7-2 08:52

gvim其实还是可以的,还能用鼠标点击和拖动分割窗口,很多操作可以用鼠标完成,利于上手,vim的作者当年花了很多心血做的这个gui化。我主要是不习惯gvim和终端的分离
回复

使用道具 举报

 楼主| 发表于 2010-7-2 14:06 | 显示全部楼层
我很喜欢 gVim 的启动速度和扩展脚本,但不喜欢命令模式,我不想记 i 和 : 以外的命令,对我而言很不实用还容易按错,鼠标的功能几乎没有发挥,确实不够方便。

另外问一下怎么执行在选中区域中替换?我只知道替换可以指定某些行,但还是不方便啊……
回复

使用道具 举报

     
发表于 2010-7-2 14:13 | 显示全部楼层
Win32我用Notepad++,Linux用VIM。项目经理是EMACS走天下。

主要我觉得EMACS和VIM的意义在于,可以彻底仍开鼠标,适合写代码的。码字途中离开键盘去摸鼠标让人很不爽……
回复

使用道具 举报

 楼主| 发表于 2010-7-2 14:22 | 显示全部楼层
我也不喜欢鼠标换来换去,但是有些时候还是鼠标比较方便吧,比如:
1、鼠标滚轮不会影响光标位置,方便看一眼别的地方再切回来;
2、很长而且用的不多的变量名,直接敲容易拼错,我都是直接复制粘贴的
3、交换几块代码的位置、删除大块的代码,还是鼠标比较迅速吧?
不知道这些操作键盘怎样才会快?
回复

使用道具 举报

发表于 2010-7-2 14:34 | 显示全部楼层
变量名 有脚本自动完成 打一次够了
代码块....
还是过一遍那个自带的20分钟教程
回复

使用道具 举报

 楼主| 发表于 2010-7-2 15:13 | 显示全部楼层
变量名 有脚本自动完成 打一次够了
代码块....
还是过一遍那个自带的20分钟教程
ov_efly 发表于 2010-7-2 14:34


单个文件的没问题,多个文件之间的还是不舒服啊……
教程里只说了单行的怎么弄,多行以及不规则边界的呢?
另外 vim 里边的 w 匹配和鼠标双击不同,只是光标处到词尾的?这个真不习惯……
回复

使用道具 举报

     
发表于 2010-7-2 15:19 | 显示全部楼层
我很喜欢 gVim 的启动速度和扩展脚本,但不喜欢命令模式,我不想记 i 和 : 以外的命令,对我而言很不实用还容易按错,鼠标的功能几乎没有发挥,确实不够方便。

另外问一下怎么执行在选中区域中替换?我只知道替换可 ...
eph 发表于 2010-7-2 14:06

gvim启动速度不够快,比geany这个ide还要慢一点呢

光有i和:是远远不够的啊,至少要知道光标移动的那些快捷键(e,ge,w,b,0,^,$,%,[[,]],{,},gg,G,H,M,L,h,j,k,l,C-u,C-d,C-b,C-f等),非编辑模式下的简单编辑(x,X,D,J),选中后的u,U,~大小写切换,注意有些前面可以加数字,进入编辑模式的几种方式(i,a,s,o,O等),否则连操作宏都录不出

替换的话,vim其实内置了sed,语法有一点点不同,逗号变成斜杠了
回复

使用道具 举报

     
发表于 2010-7-2 15:29 | 显示全部楼层
我也不喜欢鼠标换来换去,但是有些时候还是鼠标比较方便吧,比如:
1、鼠标滚轮不会影响光标位置,方便看一眼别的地方再切回来;
2、很长而且用的不多的变量名,直接敲容易拼错,我都是直接复制粘贴的
3、交 ...
eph 发表于 2010-7-2 14:22

1 用mark,前面我举得的多文件之间的复制粘贴已经用到了。在非编辑模式下输入mx,其中x可以是字母或数字,然后随意移动,想回来是输入\'x或`x,x当然需要和前面的mx中的x相匹配,\'和`的区别是前者跳转到mark所在行,后者是具体到字符的。所以前面复制粘贴的例子范围是可以具体到字符而非行的

2 最简单的是用C-n补全,好像需要插件支持才会有下拉列表的?我忘记了,也忘记是不是补全范围默认支持tags的还是本文本内

3 这个键盘党一定觉得键盘方便,鼠标党肯定认为鼠标方便,呵呵,注意多利用寄存器(或者叫多重剪贴板?)。不过鼠标党必须要承认的是如果是重复操作肯定是用q录个宏要方便,而vim的宏是基于键盘的
回复

使用道具 举报

 楼主| 发表于 2010-7-2 15:34 | 显示全部楼层
光有i和:是远远不够的啊,至少要知道光标移动的那些快捷键(e,ge,w,b,0,^,$,%,[[,]], {,},gg,G,H,M,L,h,j,k,l,C-u,C-d,C-b,C-f等),非编辑模式下的简单编辑(x,X,D,J),选中后的u,U,~大小写切换,注意有些前面可以加数字,进入编辑模式的几种方式(i,a,s,o,O等),否则连操作宏都录不出
henvelleng 发表于 2010-7-2 15:19


我看过这些的说明——这就是我不喜欢 Vim 的地方
而且像 p 是下方粘贴,shift-p 才是上方粘贴这类和 Excel 等相反的设定,用起来很混乱啊

sed 完全是两码事吧……举个例子如果我只要把 HTML 某个 <div> 内的 <font color=\"...\"><b>...</b></font> 替换成 <b style=\"color:...\">...</b> 怎么操作呢?
回复

使用道具 举报

     
发表于 2010-7-2 15:35 | 显示全部楼层
还有很重要的一点,注意快捷键的互相搭配,快捷键都不是standalone的,最简单的,非编辑模式下吧把移动操作和编辑操作进行组合,威力巨大,比如说的d2w
回复

使用道具 举报

 楼主| 发表于 2010-7-2 15:42 | 显示全部楼层
大概是鼠标操作的后遗症吧,不擅长数数
另外我用文本编辑器的时候和各种其它软件之间交换数据非常频繁,软件内部的多重剪贴板不是很对胃口……
回复

使用道具 举报

     
发表于 2010-7-2 16:23 | 显示全部楼层
举个例子如果我只要把 HTML 某个 <div> 内的 <font color=\"...\"><b>...</b></font> 替换成 <b style=\"color:...\">...</b> 怎么操作呢?
eph 发表于 2010-7-2 15:34

用sed啊
你的例子特殊字符太多,写出来转义太多很难看,对说明方法来说无意义,另举个没特殊字符的例子吧

把123...456...789替换成987...654...321
:s/123\\(.*\\)456\\(.*\\)789/987\\1654\\2321/g

另外还可以指定修改哪些行,也有一系列匹配方式,这个就不多说了
回复

使用道具 举报

 楼主| 发表于 2010-7-2 16:28 | 显示全部楼层
用sed啊
你的例子特殊字符太多,写出来转义太多很难看,对说明方法来说无意义,另举个没特殊字符的例子吧

把123...456...789替换成987...654...321
:s/123\\(.*\\)456\\(.*\\)789/987\\1654\\2321/g

另外还可以指定修改 ...
henvelleng 发表于 2010-7-2 16:23


我的例子的关键是“某个 <div> 内”,也就是说只在文件的一部分替换(不一定是某几行),在 UE 里边是选中然后替换时勾选 替换范围 - 选定文字,这在对某一块文字进行多次替换时尤其方便(有时也是懒得想一个比较完美的正则),不过 Vim 这种比较少对“选定文字”进行操作的,我不知道是怎么解决的?
回复

使用道具 举报

     
发表于 2010-7-2 16:29 | 显示全部楼层
其实我也不数数的,可以用f之类来指定移动
回复

使用道具 举报

发表于 2010-7-2 16:42 | 显示全部楼层
>>1、鼠标滚轮不会影响光标位置,方便看一眼别的地方再切回来;
Console下不成立
>>2、很长而且用的不多的变量名,直接敲容易拼错,我都是直接复制粘贴的
请善用全能补全(Ctrl+P/N)
>>3、交换几块代码的位置、删除大块的代码,还是鼠标比较迅速吧?
这种情况说明你代码格式有问题了
善用Fold功能
>>非编辑模式下输入法照样出中文只是理所当然的不能编辑到文本上,这个是正常的,按shift将输入法切到英文模式就和没开输入法一样了,编辑模式和非编辑模式一切正常,在编辑模式下也可以用shift再切回中文模式。我这里是ubuntu10.04,ibus平台的老搜狗云
你这么玩就要按完esc还有再按shift,这不是给自己找麻烦么。
>>gvim启动速度不够快,比geany这个ide还要慢一点呢
这个是Linux图形子系统的问题
Windows下是飞快
>>最简单的是用C-n补全,好像需要插件支持才会有下拉列表的?我忘记了,也忘记是不是补全范围默认支持tags的还是本文本内
全能补全范围包括tag和打开的buffer
但是这个功能有时不包括tag数据库可能更好——特别是装了很多devel包的时候。
经常有Ctrl+N之后vim扫半天tag数据库,何其悲剧……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-8-21 08:28 , Processed in 0.284791 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表