主题:[原创]技巧奉献:IVF中实现“代码自动补全”
mltx [专家分:20880] 发布于 2007-07-07 16:58:00
初步调试成功,若有故障,反馈后俺再修改。
若其他网页有此技巧,则纯属巧合。
[color=FF0000]做法:[/color]
为保险起见,可在Microsoft Visual Studio 8中找到Samples.vsmacros做一个备份。
[color=800000][b](I) 修改宏命令[/b][/color]
在VS2005中选的宏资源管理器中装入Samples,选中打开DevStudio6Editor。
下面对其中的几条命令作修改:
[color=0000FF](1) Sub AutoCompleteFromFile中:
(改1) [/color]
origLine = sel.CurrentLine
origCol = sel.CurrentColumn
sel.WordLeft(DsMovementOptions.dsExtend)
后添加
[color=FF0000] If origLine <> sel.CurrentLine Then
sel.Cancel()
sel.MoveToLineAndOffset(origLine, origCol)
Exit Sub
End If[/color]
[color=0000FF](改2) [/color]
FillCompletionWords(sel.Text)
sel.MoveToLineAndOffset(origLine, origCol)
sel.WordLeft(DsMovementOptions.dsExtend)
SuggestNextCompletionWord()
改为
[color=FF0000]If sel.Text <> previousSelection Or completionWords = "" Then[/color]
FillCompletionWords(sel.Text)
sel.MoveToLineAndOffset(origLine, origCol)
sel.WordLeft(DsMovementOptions.dsExtend)
[color=FF0000]End If[/color]
SuggestNextCompletionWord()
[color=0000FF](2) Sub FillCompletionWords 中:
(改1)[/color]
searchString = "[^a-zA-Z0-9]" & word
改为
[color=FF0000]searchString = "{^|[^a-zA-Z0-9_!%]}" & word[/color]
[color=0000FF](改2) [/color]
sel.WordRight()
sel.WordLeft(DsMovementOptions.dsExtend)
改为
[color=FF0000]sel.WordLeft()
sel.WordRight(DsMovementOptions.dsExtend)[/color]
[color=0000FF](3) Function SuggestNextCompletionWord中:[/color]
将
selection.WordLeft(DsMovementOptions.dsExtend)
封掉
[color=FF0000] 'selection.WordLeft(DsMovementOptions.dsExtend)[/color]
[color=800000][b](II) 添加工具钮、快捷键[/b][/color]
感谢hanronggui提供的方法:
VS2005中选:工具-自定义-命令中选择宏
在右边的面板中找到Samples.DevStudio6Editor.AutoCompleteFromFile,拖到工具栏上;
在“自定义”中点“修改选中的内容”按钮,
将名称改为:自动补码(&A);
关闭自定义
[color=FF0000]用法:[/color]
在当前的代码文件中,您键入一个字词的一两个字母,按该按钮或者快捷键Alt+a,则可启动该宏命令在你的文件中搜寻你要键入的字词,并自动补全显示;再按快捷键则显示下一个可选的字词。
例如,你当前的代码文件中有:
implicit none
integer :: ix,iy
则你键入i后,按快捷键,则自动将i补全为implicit,再按快捷键,则依次改换为integer=>ix=>iy=>implicit;
若你键入in后,按快捷键,则直接出现integer.
[color=FF0000][b]Enjoy![/b][/color]
最后更新于:2007-07-08 13:18:00
回复列表 (共9个回复)
沙发
hanronggui [专家分:260] 发布于 2007-07-07 18:21:00
谢谢mltx老师的辛勤工作!!
发现一个问题,我用ivf自带的求积分的程序适了一下,在输入i后,用快捷键
不会出现integer,不知为什么?程序如下:
program int_sin
implicit none
! Create a value DP that is the "kind" number of a double precision value
! We will use this value in our declarations and constants.
integer, parameter :: DP = kind(0.0d0)
! Declare a named constant for pi, specifying the kind type
real(DP), parameter :: pi = 3.141592653589793238_DP
! Declare interval begin and end
real(DP), parameter :: interval_begin = 0.0_DP
real(DP), parameter :: interval_end = 2.0_DP * pi
real(DP) :: step, sum, x_i
integer :: N, i, j
real clock_start, clock_finish
write (*,'(A)') " "
write (*,'(A)') " Number of | Computed Integral |"
write (*,'(A)') " Interior Points | |"
call cpu_time (clock_start)
do j=2,26
write (*,'(A)') "--------------------------------------"
N = 2**j
! Compute stepsize for N-1 internal rectangles
step = (interval_end - interval_begin) / real(N,DP);
! Approximate 1/2 area in first rectangle: f(x0) * (step/2)
sum = INTEG_FUNC(interval_begin) * (step / 2.0_DP)
! sum = INTEG_FUNC(interval_begin) *0.5_DP
do i=1,N-1
x_i = real(i,DP) * step
! Apply midpoint rule:
! Given length = f(x), compute the area of the
! rectangle of width step
sum = sum + (INTEG_FUNC(x_i) * step)
! sum = sum + abs(sin(x_i))
end do
! Add approximate area in last rectangle for f(xN) * (step/2)
sum = sum + (INTEG_FUNC(interval_end) * (step / 2.0_DP))
! sum = sum + (INTEG_FUNC(interval_end) * 0.5_DP)
! sum=sum*step
write (*,'(T5,I10,T18,"|",2X,1P,E14.7,T38,"|")') N, sum
end do
call cpu_time(clock_finish)
write (*,'(A)') "--------------------------------------"
write (*,'(A)') " "
write (*,*) "CPU Time = ",(clock_finish - clock_start), " seconds"
contains
! Function to integrate
real(DP) function INTEG_FUNC (x)
real(DP), intent(IN) :: x
INTEG_FUNC = abs(sin(x))
return
end function INTEG_FUNC
end program int_sin
板凳
sjohn [专家分:5600] 发布于 2007-07-08 00:31:00
谢谢mlxt的分享
1楼说的问题我也遇到了
另外在XP的任务栏图表中,执行宏命令时老是跳出单击此处停止宏命令的图标,还配有气球声音,呵呵,不知道有没有办法解决
再次表示感谢
3 楼
vqimwr [专家分:1320] 发布于 2007-07-08 08:31:00
支持,谢谢。
4 楼
mltx [专家分:20880] 发布于 2007-07-08 13:30:00
感谢楼上问题反馈。
找到了问题和解决放案。首贴中的一条改成如下即可:
(2) Sub FillCompletionWords 中:
(改1)
searchString = "[^a-zA-Z0-9]" & word
改为
searchString = [color=FF0000]"{^|[^a-zA-Z0-9_!%]}" [/color]& word
首贴中已经改正了。
至于跳出气球的问题,暂时还没顾上。
应该属于环境设置问题,有了办法再来通报。
也许hanronggui可以有办法?
PS:微软应该把VS2005做这个Macro的人解雇!DevS6中好好的,都让他们转坏了!
5 楼
hanronggui [专家分:260] 发布于 2007-07-09 12:01:00
感谢mltx老师的修改。
2楼的问题我也不知道是为什么。
希望其它网友帮忙啊!!!
6 楼
junziyang [专家分:150] 发布于 2008-10-15 10:40:00
严格安装楼主的办法改的。但新建一个.f90文件试了一下,不成功。
不知道哪里出了问题。就是没有提示和补全。请指教。
7 楼
jlumok [专家分:20] 发布于 2008-10-17 21:39:00
楼主说的是对的,但是在低版本的不行
8 楼
junziyang [专家分:150] 发布于 2008-10-30 15:02:00
我的是Microsoft Visual Studio 2005 Team + Intel Visual Fortran 10.1.
严格按楼主说的改的。但最终成功。不知咋回事!
9 楼
cnsixeyes [专家分:0] 发布于 2008-11-29 23:44:00
我的没有用
我来回复