Chinaunix

标题: 求助vim高手,perl调试 [打印本页]

作者: ttcn_cu    时间: 2012-06-08 20:29
标题: 求助vim高手,perl调试
希望按一个快捷键以后在quickfix中出现 perl <当前编辑文件> 的运行结果。
perlvim知道么?

作者: flw    时间: 2012-06-08 22:13
本帖最后由 flw 于 2012-06-08 22:14 编辑

没啥意义,真的。

我用 screen,ctrl+aa 换屏很方便。
或者用 ctrl+z 也行。

我始终坚信:一个人在同一时刻只能关注一件事情。
作者: ttcn_cu    时间: 2012-06-08 23:03
回复 2# flw


    你的观点我同意,折腾很多东西会分散开发的注意力。在Linux sever上这个两个技巧我都会的。但我这里用的是windows上的Gvim(毕竟在自己的windows 笔记本上调试程序比远程方便多了)。
解决方案已经找到了,
在_vimrc里加上两行:
  1. map <silent><F1> :Shell %<cr>
  2. imap <silent><F1> <ESC>:Shell %<cr>
复制代码
Shell应该是一个以前装的插件
发这个贴的原因是不知道那个%。。。

作者: ttcn_cu    时间: 2012-06-08 23:08
回复 2# flw


    你的观点我同意,折腾很多东西会分散开发的注意力。在Linux sever上这个两个技巧我都会的。但我这里用的是windows上的Gvim(毕竟在自己的windows 笔记本上调试程序比远程方便多了)。
解决方案已经找到了,
在_vimrc里加上两行:
  1. map <silent><F1> :Shell %<cr>
  2. imap <silent><F1> <ESC>:Shell %<cr>
复制代码
Shell应该是一个以前装的插件
发这个贴的原因是不知道那个%。。。

作者: flw    时间: 2012-06-09 00:04
本帖最后由 flw 于 2012-06-09 00:04 编辑

windows 下当然用 cmd.exe 呀。切换窗户用 Alt+TAB 就好。
作者: ttcn_cu    时间: 2012-06-09 00:09
回复 5# flw


    cmd.exe 有两大问题
     1.窗口不能随意放大缩小,显示效果不佳, 这个问题可以用一个叫console2的软件处理下
     2. 不支持unicode,这个导致新版本的perl在windows下调试汉字非常不方便。特别是当今utf8成为主流,在大部分平台模块浏览器都能完全正常显示utf8字符的今天,还要把输出转下码,这个很麻烦。一般找个支持utf8可以模拟的编辑器解决,比如notepad++或者komodo之类的,gvim还没试验。。。(暂时没处理中文)


总结,cmd.exe 被无情的抛弃在历史垃圾桶里(至少在调试perl程序的时候)
作者: Perlvim    时间: 2012-06-09 00:18
本帖最后由 Perlvim 于 2012-06-09 00:20 编辑

bbs opened again.
!perl script.pl
I don't like this.
I use tools auto create a bat file to run this perl script.

So I can amend the script, not need closed the cmd windows.
作者: wiliiwin    时间: 2012-06-09 01:01
学习了
作者: flw    时间: 2012-06-09 10:29
反正我用 cmd.exe 一直好好的。
再说了,现在不还有 PowerShell 麽。虽然我一直没适应。
作者: flw    时间: 2012-06-09 10:31
我作为一个十几年的老 Vim 用户,
我认为,任何妄图给 Vim 里面加 shell 或者调试功能的行为,都非常愚蠢。

Vim 就是一个编辑器。
作者: 斯文牛氓    时间: 2012-06-09 11:18
perl有个模块Vim:ebug:erl,可以试一下,还有komodo的调试很好用
作者: Perl_Er    时间: 2012-06-09 11:46
回复 1# ttcn_cu


    http://www.vim.org/scripts/script.php?script_id=556


    安装上面那个plugin,在编辑器里面按\rr就直接显示结果,也可以将hotkey改为其他的key
作者: shaohao_cu    时间: 2012-06-09 22:38
  1. autocmd FileType perl set cindent tabstop=8 shiftwidth=4 softtabstop=4 shiftround expandtab
  2. autocmd FileType perl set makeprg=perl\ %
  3. autocmd FileType perl set efm=%mat\ %f\ line\ %l%.%#
  4. nmap <F5> :mak<CR>
复制代码
按F5
作者: shaohao_cu    时间: 2012-06-09 22:39

  1. "Perl
  2. autocmd FileType perl set cindent tabstop=8 shiftwidth=4 softtabstop=4 shiftround expandtab
  3. autocmd FileType perl set makeprg=perl\ %
  4. autocmd FileType perl set efm=%mat\ %f\ line\ %l%.%#

  5. nmap <F5> :mak<CR>
复制代码
加到.vimrc里面,然后打开pl文件按F5
作者: shaohao_cu    时间: 2012-06-09 22:39

  1. "Perl
  2. autocmd FileType perl set cindent tabstop=8 shiftwidth=4 softtabstop=4 shiftround expandtab
  3. autocmd FileType perl set makeprg=perl\ %
  4. autocmd FileType perl set efm=%mat\ %f\ line\ %l%.%#

  5. nmap <F5> :mak<CR>
复制代码
加到.vimrc里面,然后打开pl文件按F5
作者: starwing83    时间: 2012-06-10 02:25
试试我写的ctk.vim?

http://www.vim.org/scripts/script.php?script_id=2618
作者: Perl_Er    时间: 2012-06-11 11:06
回复 16# starwing83


    没试过,但是看上去不错。:wink:
作者: fucj    时间: 2012-06-11 16:33
只能检查编译是否错误阿,不能显示输出阿
作者: ttcn_cu    时间: 2012-06-11 18:59
回复 9# flw


    如果你用cmd用的好好的,那只能说明
可能你查看的输出很简明,很少用处理汉字问题(或者一直用cp936编码)

powershell不仅没有解决我提到的两个问题而且引入了更多新的“问题”
比如设置环境变量非常麻烦
PS C:\Users\> [Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User")
PS C:\Users\> Get-ChildItem Env

http://technet.microsoft.com/en-us/library/ff730964.aspx
作者: py    时间: 2012-06-11 22:56
flw 发表于 2012-06-08 22:13
没啥意义,真的。

我用 screen,ctrl+aa 换屏很方便。


呵呵,你也用screen啊。screen讨厌的地方就是ctrl+ a/w什么的被占了,打命令的时候需要移动光标麻烦

我一般是开两个shell,一个screen用于写代码,一个调试窗口。如果要一屏看多个代码文件就在vim里:vsp 打开新文件


作者: flw    时间: 2012-06-11 23:01
py 发表于 2012-06-11 22:56
呵呵,你也用screen啊。screen讨厌的地方就是ctrl+ a/w什么的被占了,打命令的时候需要移动光标麻烦

...

我用 set -o vi
作者: ttcn_cu    时间: 2012-06-11 23:39

搞定了,在windows下得gvim是支持中文utf8编码的,这样就简单多了

不喜欢绑定到F5,容易按到wifi关闭按钮。。。。
调试按钮绑定在F1上,反正99%程序的帮助没啥大用。一般查google
作者: starwing83    时间: 2012-06-12 02:12
回复 22# ttcn_cu


    ……Vim的帮助文档那是非常非常有用……有用到甚至有人专门翻译了一份中文的……vimcdoc.sf.net……

不过Vim的帮助在:h,不在<F1>……
作者: py    时间: 2012-06-12 08:20
flw 发表于 2012-06-11 23:01
我用 set -o vi

一直不知道命令行就是一个行编辑器,成天在用的ctrl+A/E/W是emacs...
这办法是釜底抽薪了。用熟了效率肯定很高
作者: flw    时间: 2012-06-12 09:54
py 发表于 2012-06-12 08:20
一直不知道命令行就是一个行编辑器,成天在用的ctrl+A/E/W是emacs...
这办法是釜底抽薪了。用熟了效率肯 ...

其实命令行用的是 readline,所以 set -o vi 不是最好的做法,因为这个只是 bash 的内部命令。

最好的做法是 vim ~/.inputrc,然后
set editing-mode vi
set keymap vi


这样所有使用 readline 的程序就都会支持 vim 的快捷键了,
比如说 CPAN shell。
作者: flw    时间: 2012-06-12 09:59
顺便说一句,如果一屏要看多个文件的话,vsp 其实我觉得不如 tab 好使。
当然这个仁者见仁,智者见智了。我了解很多说 tab 不好使的人其实是因为切换 tab 没有绑定快捷键,觉得太麻烦。

另一方面,打开文件也不必全部依赖 vsp 的命令行补全。
我推荐 BufferExplorer 模块和 MRU 模块,可以方便的打开文件,或者在已打开但关闭了窗口的文件之间切换。

再加上 gf 打开文件,回想一下,认认真真拼写文件名的机会其实很小。
作者: ttcn_cu    时间: 2012-06-12 17:19
本帖最后由 ttcn_cu 于 2012-06-14 16:03 编辑

回复 25# flw


    试了下,在csh下不能用啊,局限于bash么?

echo $0
-tcsh



bindkey -v

作者: perlnewbie    时间: 2012-06-13 13:14
本帖最后由 perlnewbie 于 2012-06-13 13:33 编辑
ttcn_cu 发表于 2012-06-11 23:39
搞定了,在windows下得gvim是支持中文utf8编码的,这样就简单多了

不喜欢绑定到F5,容易按到wifi关闭按 ...


大哥你的F1怎么去掉的?

  1. map <F1> <ESC>
复制代码
我有时按ESC时候会偶尔按到F1所以想把F1也折腾成ESC的功能.
或map <F1> <nop>
但是这么map似乎没用.帮助还是跳出来


解决了....要写成这样:

  1. imap <F1> <Esc>
  2. nmap <F1> <Esc>
  3. cmap <F1> <Esc>
复制代码

作者: blackold    时间: 2012-06-13 16:09
cmd 也可以配置的。默认配置确实丑陋无比。
作者: ttcn_cu    时间: 2012-06-14 03:37
blackold 发表于 2012-06-13 16:09
cmd 也可以配置的。默认配置确实丑陋无比。



unicode的支持是无法配置的。。。是一个已知缺陷,曾广泛的查询过各个技术社区,未果,遗憾。

作者: zhlong8    时间: 2012-06-14 09:07
ttcn_cu 发表于 2012-06-14 03:37
unicode的支持是无法配置的。。。是一个已知缺陷,曾广泛的查询过各个技术社区,未果,遗憾。


用 encoding 把 STDOUT 的编码改下不就行了,Perl会自动给你转码的
作者: zhlong8    时间: 2012-06-14 09:29
ttcn_cu 发表于 2012-06-14 03:37
unicode的支持是无法配置的。。。是一个已知缺陷,曾广泛的查询过各个技术社区,未果,遗憾。


用 encoding 设置下 STDOUT 的编码让 perl 自动转换不行吗?
作者: sceyu    时间: 2012-06-14 14:20
Mark 一 下
作者: ttcn_cu    时间: 2012-06-14 15:48
本帖最后由 ttcn_cu 于 2012-06-14 15:57 编辑

回复 31# zhlong8


    果然可以,看来是我钻牛角尖了,把注意力放在了cmd本身上。
感谢提供workaround!
  1. package CmdGBK;
  2. binmode(STDIN, ":encoding(gbk)");
  3. binmode(STDOUT, ":encoding(gbk)");
  4. binmode(STDERR, ":encoding(gbk)");
  5. 1;
复制代码
参考了 iakuf大侠的网站:http://www.php-oa.com/2008/12/13/perl-unicode.html






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2