我通常使用NEdit并且有一个文件可以突出显示常见的Fortran语言。
我试图添加一些缺失的关键字,例如DEALLOCATE,CONTIGUOUS等,并且悲惨地勉强。我在这里使用示例:https://groups.google.com/forum/#!topic/comp.lang.fortran/D8JtR7m53z4
有没有人为F90 +的NEdit更新版本提供任何良好的链接?
答案 0 :(得分:0)
亮点是Fortran90在Fortran附近排在第308行之前。仍然存在问题!?OMP但运行良好,我使用CAPS for Fortran Intrinsics和CamelCase进行大多数变量,子程序和函数...
! Preferences file for NEdit
!
! This file is overwritten by the "Save Defaults..." command in NEdit
! and serves only the interactively settable options presented in the NEdit
! "Preferences" menu. To modify other options, such as key bindings, use
! the .Xdefaults file in your home directory (or the X resource
! specification method appropriate to your system). The contents of this
! file can be moved into an X resource file, but since resources in this file
! override their corresponding X resources, either this file should be
! deleted or individual resource lines in the file should be deleted for the
! moved lines to take effect.
nedit.fileVersion: 5.5
nedit.shellCommands: \
spell:Alt+B:s:ED:\n\
(cat;echo "") | spell\n\
wc::w:ED:\n\
wc | awk '{print $1 " lines, " $2 " words, " $3 " characters"}'\n\
sort::o:EX:\n\
sort\n\
number lines::n:AW:\n\
nl -ba\n\
make:Alt+Z:m:W:\n\
make\n\
expand::p:EX:\n\
expand\n\
unexpand::u:EX:\n\
unexpand\n
nedit.macroCommands: \
Complete Word:Alt+D::: {\n\
# Tuning parameters\n\
ScanDistance = 200\n\
\n\
# Search back to a word boundary to find the word to complete\n\
startScan = max(0, $cursor - ScanDistance)\n\
endScan = min($text_length, $cursor + ScanDistance)\n\
scanString = get_range(startScan, endScan)\n\
keyEnd = $cursor-startScan\n\
keyStart = search_string(scanString, "<", keyEnd, "backward", "regex")\n\
if (keyStart == -1)\n\
return\n\
keyString = "<" substring(scanString, keyStart, keyEnd)\n\
\n\
# search both forward and backward from the cursor position. Note that\n\
# using a regex search can lead to incorrect results if any of the special\n\
# regex characters is encountered, which is not considered a delimiter\n\
backwardSearchResult = search_string(scanString, keyString, keyStart-1, \\\n\
"backward", "regex")\n\
forwardSearchResult = search_string(scanString, keyString, keyEnd, "regex")\n\
if (backwardSearchResult == -1 && forwardSearchResult == -1) {\n\
beep()\n\
return\n\
}\n\
\n\
# if only one direction matched, use that, otherwise use the nearest\n\
if (backwardSearchResult == -1)\n\
matchStart = forwardSearchResult\n\
else if (forwardSearchResult == -1)\n\
matchStart = backwardSearchResult\n\
else {\n\
if (keyStart - backwardSearchResult <= forwardSearchResult - keyEnd)\n\
matchStart = backwardSearchResult\n\
else\n\
matchStart = forwardSearchResult\n\
}\n\
\n\
# find the complete word\n\
matchEnd = search_string(scanString, ">", matchStart, "regex")\n\
completedWord = substring(scanString, matchStart, matchEnd)\n\
\n\
# replace it in the window\n\
replace_range(startScan + keyStart, $cursor, completedWord)\n\
}\n\
Fill Sel. w/Char:::R: {\n\
if ($selection_start == -1) {\n\
beep()\n\
return\n\
}\n\
\n\
# Ask the user what character to fill with\n\
fillChar = string_dialog("Fill selection with what character?", "OK", "Cancel")\n\
if ($string_dialog_button == 2 || $string_dialog_button == 0)\n\
return\n\
\n\
# Count the number of lines in the selection\n\
nLines = 0\n\
for (i=$selection_start; i<$selection_end; i++)\n\
if (get_character(i) == "\\n")\n\
nLines++\n\
\n\
# Create the fill text\n\
rectangular = $selection_left != -1\n\
line = ""\n\
fillText = ""\n\
if (rectangular) {\n\
for (i=0; i<$selection_right-$selection_left; i++)\n\
line = line fillChar\n\
for (i=0; i<nLines; i++)\n\
fillText = fillText line "\\n"\n\
fillText = fillText line\n\
} else {\n\
if (nLines == 0) {\n\
for (i=$selection_start; i<$selection_end; i++)\n\
fillText = fillText fillChar\n\
} else {\n\
startIndent = 0\n\
for (i=$selection_start-1; i>=0 && get_character(i)!="\\n"; i--)\n\
startIndent++\n\
for (i=0; i<$wrap_margin-startIndent; i++)\n\
fillText = fillText fillChar\n\
fillText = fillText "\\n"\n\
for (i=0; i<$wrap_margin; i++)\n\
line = line fillChar\n\
for (i=0; i<nLines-1; i++)\n\
fillText = fillText line "\\n"\n\
for (i=$selection_end-1; i>=$selection_start && get_character(i)!="\\n"; \\\n\
i--)\n\
fillText = fillText fillChar\n\
}\n\
}\n\
\n\
# Replace the selection with the fill text\n\
replace_selection(fillText)\n\
}\n\
Quote Mail Reply:::: {\n\
if ($selection_start == -1)\n\
replace_all("^.*$", "\\\\> &", "regex")\n\
else\n\
replace_in_selection("^.*$", "\\\\> &", "regex")\n\
}\n\
Unquote Mail Reply:::: {\n\
if ($selection_start == -1)\n\
replace_all("(^\\\\> )(.*)$", "\\\\2", "regex")\n\
else\n\
replace_in_selection("(^\\\\> )(.*)$", "\\\\2", "regex")\n\
}\n\
Comments>/* Comment */@C@C++@Java@CSS@JavaScript@Lex:::R: {\n\
selStart = $selection_start\n\
selEnd = $selection_end\n\
replace_range(selStart, selEnd, "/* " get_selection() " */")\n\
select(selStart, selEnd + 6)\n\
}\n\
Comments>/* Uncomment */@C@C++@Java@CSS@JavaScript@Lex:::R: {\n\
sel = get_selection()\n\
selStart = $selection_start\n\
selEnd = $selection_end\n\
commentStart = search_string(sel, "/*", 0)\n\
if (substring(sel, commentStart + 2, commentStart + 3) == " ")\n\
keepStart = commentStart + 3\n\
else\n\
keepStart = commentStart + 2\n\
keepEnd = search_string(sel, "*/", length(sel), "backward")\n\
commentEnd = keepEnd + 2\n\
if (substring(sel, keepEnd - 1, keepEnd) == " ")\n\
keepEnd = keepEnd - 1\n\
replace_range(selStart + commentStart, selStart + commentEnd, \\\n\
substring(sel, keepStart, keepEnd))\n\
select(selStart, selEnd - (keepStart-commentStart) - \\\n\
(commentEnd - keepEnd))\n\
}\n\
Comments>// Comment@C@C++@Java@JavaScript:::R: {\n\
replace_in_selection("^.*$", "// &", "regex")\n\
}\n\
Comments>// Uncomment@C@C++@Java@JavaScript:::R: {\n\
replace_in_selection("(^[ \\\\t]*// ?)(.*)$", "\\\\2", "regex")\n\
}\n\
Comments># Comment@Perl@Sh Ksh Bash@NEdit Macro@Makefile@Awk@Csh@Python@Tcl:::R: {\n\
replace_in_selection("^.*$", "#&", "regex")\n\
}\n\
Comments># Uncomment@Perl@Sh Ksh Bash@NEdit Macro@Makefile@Awk@Csh@Python@Tcl:::R: {\n\
replace_in_selection("(^[ \\\\t]*#)(.*)$", "\\\\2", "regex")\n\
}\n\
Comments>-- Comment@SQL:::R: {\n\
replace_in_selection("^.*$", "--&", "regex")\n\
}\n\
Comments>-- Uncomment@SQL:::R: {\n\
replace_in_selection("(^[ \\\\t]*--)(.*)$", "\\\\2", "regex")\n\
}\n\
Comments>! Comment@X Resources:::R: {\n\
replace_in_selection("^.*$", "!&", "regex")\n\
}\n\
Comments>! Uncomment@X Resources:::R: {\n\
replace_in_selection("(^[ \\\\t]*!)(.*)$", "\\\\2", "regex")\n\
}\n\
Comments>% Comment@LaTeX:::R: {\n\
replace_in_selection("^.*$", "%&", "regex")\n\
}\n\
Comments>% Uncomment@LaTeX:::R: {\n\
replace_in_selection("(^[ \\\\t]*%)(.*)$", "\\\\2", "regex")\n\
}\n\
Comments>Bar Comment@C:::R: {\n\
if ($selection_left != -1) {\n\
dialog("Selection must not be rectangular")\n\
return\n\
}\n\
start = $selection_start\n\
end = $selection_end-1\n\
origText = get_range($selection_start, $selection_end-1)\n\
newText = "/*\\n" replace_in_string(get_range(start, end), \\\n\
"^", " * ", "regex") "\\n */\\n"\n\
replace_selection(newText)\n\
select(start, start + length(newText))\n\
}\n\
Comments>Bar Uncomment@C:::R: {\n\
selStart = $selection_start\n\
selEnd = $selection_end\n\
newText = get_range(selStart+3, selEnd-4)\n\
newText = replace_in_string(newText, "^ \\\\* ", "", "regex")\n\
replace_range(selStart, selEnd, newText)\n\
select(selStart, selStart + length(newText))\n\
}\n\
Make C Prototypes@C@C++:::: {\n\
if ($selection_start == -1) {\n\
start = 0\n\
end = $text_length\n\
} else {\n\
start = $selection_start\n\
end = $selection_end\n\
}\n\
string = get_range(start, end)\n\
nDefs = 0\n\
searchPos = 0\n\
prototypes = ""\n\
staticPrototypes = ""\n\
for (;;) {\n\
headerStart = search_string(string, \\\n\
"^[a-zA-Z]([^;#\\"'{}=><!/]|\\n)*\\\\)[ \\t]*\\n?[ \\t]*\\\\{", \\\n\
searchPos, "regex")\n\
if (headerStart == -1)\n\
break\n\
headerEnd = search_string(string, ")", $search_end,"backward") + 1\n\
prototype = substring(string, headerStart, headerEnd) ";\\n"\n\
if (substring(string, headerStart, headerStart+6) == "static")\n\
staticPrototypes = staticPrototypes prototype\n\
else\n\
prototypes = prototypes prototype\n\
searchPos = headerEnd\n\
nDefs++\n\
}\n\
if (nDefs == 0) {\n\
dialog("No function declarations found")\n\
return\n\
}\n\
new()\n\
focus_window("last")\n\
replace_range(0, 0, prototypes staticPrototypes)\n\
}\n
nedit.bgMenuCommands: \
Undo:::: {\n\
undo()\n\
}\n\
Redo:::: {\n\
redo()\n\
}\n\
Cut:::R: {\n\
cut_clipboard()\n\
}\n\
Copy:::R: {\n\
copy_clipboard()\n\
}\n\
Paste:::: {\n\
paste_clipboard()\n\
}\n
nedit.highlightPatterns: Ada:Default\n\
Awk:Default\n\
C++:Default\n\
C:Default\n\
CSS:Default\n\
Csh:Default\n\
Fortran:Default\n\
Fortran90:1:30{\n\
Continuation:"&":::Flag::\n\
String:"'":"'":"\\n([^ \\t]| [^ \\t]| [^ \\t]| [^ \\t]| [^ \\t]| [ \\t0]| *\\t[^1-9])":String::\n\
Keywords:"<(LT|GT|EQ|AND|OR|ACCEPT|[Aa]ccept|ASSIGN|[Aa]ssign|AUTOMATIC|[Aa]utomatic|BACKSPACE|[Bb]ackspace|BLOCK|[Bb]lock|CALL|[Cc]all|CLOSE|[Cc]lose|COMMON|[Cc]ommon|CONTINUE|[Cc]ontinue|DATA|[Dd]ata|DECODE|[Dd]ecode|DELETE|[Dd]elete|DIMENSION|[Dd]imension|DO|[Dd]o|ELSE|[Ee]lse|ELSEIF|[Ee]lseif|ENCODE|[Ee]ncode|ENDFILE|[Ee]nd[Ff]ile|ENDFILE|[Ee]ndfile|END|[Ee]nd|ENDIF|[Ee]ndif|ENTRY|[Ee]ntry|EQUIVALENCE|[Ee]quivalence|EXIT|[Ee]xit|EXTERNAL|[Ee]xternal|FORMAT|[Ff]ormat|FUNCTION|[Ff]unction|GOTO|[Gg]oto|IF|[Ii]f|IMPLICIT|[Ii]mplicit|INCLUDE|[Ii]nclude|INQUIRE|[Ii]nquire|INTRINSIC|[Ii]ntrinsic|LOGICAL|[Ll]ogical|MAP|[Mm]ap|NONE|[Nn]one|ON|[Oo]n|OPEN|[Oo]pen|PARAMETER|[Pp]arameter|PAUSE|[Pp]ause|POINTER|[Pp]ointer|PRINT|[Pp]rint|PROGRAM|[Pp]rogram|READ|[Rr]ead|RECORD|[Rr]ecord|RETURN|[Rr]eturn|REWIND|[Rr]ewind|SAVE|[Ss]ave|STATIC|[Ss]tatic|STOP|[Ss]top|STRUCTURE|[Ss]tructure|SUBROUTINE|[Ss]ubroutine|SYSTEM|[Ss]ystem|THEN|[Tt]hen|TO|[Tt]o|TYPE|[Tt]ype|UNION|[Uu]nion|MAP|UNLOCK|[Uu]nlock|VIRTUAL|[Vv]irtual|VOLATILE|[Vv]olatile|WHILE|[Ww]hile|WRITE|[Ww]rite)>":::Keyword::D\n\
Data Types:"<(BYTE|[Bb]yte|CHARACTER|[Cc]haracter|COMPLEX|[Cc]omplex|DOUBLE COMPLEX|[Dd]ouble *[Cc]omplex|DOUBLE *PRECISION|[Dd]ouble [Pp]recision|DOUBLE|[Dd]ouble|INTEGER|[Ii]nteger|REAL|[Rr]eal)(\\*[0-9]+)?>":::Keyword::D\n\
F90 Keywords:"<('!'DIR'$'|DIR|OMP|DEC|EQV|NEQV|KIND|SIMD|PARALLEL OFF|PARALLEL ON|ALLOCATABLE|[Aa]llocatable|ALLOCATE|[Aa]llocate|CASE|[Cc]ase|CASE|[Cc]ase|CONTAINS|CONTIGUOUS|[Cc]ontiguous|[Cc]ontains|CYCLE|[Cc]ycle|DEALLOCATE|[Dd]eallocate|ELSEWHERE|[Ee]lsewhere|ENDWHERE|[Ee]ndwhere|INTENT|[Ii]ntent|INTERFACE|[Ii]nterface|MODULE|[Mm]odule|NAMELIST|[Nn]amelist|OPTIONAL|[Oo]ptional|PRIVATE|[Pp]rivate|PROCEDURE|[Pp]rocedure|PUBLIC|[Pp]ublic|REWRITE|[Rr]ewrite|SELECT|[Ss]elect|USE|[Uu]se|WHERE|[Ww]here)>":::Keyword::D\n\
Numeric const:"<[0-9]+(\\.[0-9]*)?([DEde][-+]?[0-9]*)?|\\.[0-9]+([DEde][-+]?[0-9]*)?>":::Numeric Const::D\n\
Comment:"! ":"$"::Comment::\n\
}\n\
Java:Default\n\
JavaScript:Default\n\
LaTeX:Default\n\
Lex:Default\n\
Makefile:Default\n\
Matlab:Default\n\
NEdit Macro:Default\n\
Pascal:Default\n\
Perl:Default\n\
PostScript:Default\n\
Python:Default\n\
Regex:Default\n\
SGML HTML:Default\n\
SQL:Default\n\
Sh Ksh Bash:Default\n\
Tcl:Default\n\
VHDL:Default\n\
Verilog:Default\n\
XML:Default\n\
X Resources:Default\n\
Yacc:Default
nedit.languageModes: Ada:.ada .ad .ads .adb .a:::::::\n\
Awk:.awk:::::::\n\
C++:.cc .hh .C .H .i .cxx .hxx .cpp .c++::::::".,/\\`'!|@#%^&*()-=+{}[]"":;<>?~":\n\
C:.c .h::::::".,/\\`'!|@#%^&*()-=+{}[]"":;<>?~":\n\
CSS:css::Auto:None:::".,/\\`'!|@#%^&*()=+{}[]"":;<>?~":\n\
Csh:.csh .cshrc .login .logout:"^[ \\t]*#[ \\t]*![ \\t]*/bin/csh"::::::\n\
Fortran90:.f90 .f03 .f08 .F90 .F03 .F08:::::::\n\
Fortran:.f .f77 .for :::::::\n\
Java:.java:::::::\n\
JavaScript:.js:::::::\n\
LaTeX:.tex .sty .cls .ltx .ins:::::::\n\
Lex:.lex:::::::\n\
Makefile:Makefile makefile .gmk:::None:8:8::\n\
Matlab:.m .oct .sci:::::::\n\
NEdit Macro:.nm .neditmacro:::::::\n\
Pascal:.pas .p .int:::::::\n\
Perl:.pl .pm .p5 .PL:"^[ \\t]*#[ \\t]*!.*perl":Auto:None:::".,/\\\\`'!$@#%^&*()-=+{}[]"":;<>?~|":\n\
PostScript:.ps .eps .epsf .epsi:"^%!":::::"/%(){}[]<>":\n\
Python:.py:"^#!.*python":Auto:None:::"!""#$%&'()*+,-./:;<=>?@[\\\\]^`{|}~":\n\
Regex:.reg .regex:"\\(\\?[:#=!iInN].+\\)":None:Continuous::::\n\
SGML HTML:.sgml .sgm .html .htm:"\\<[Hh][Tt][Mm][Ll]\\>"::::::\n\
SQL:.sql:::::::\n\
Sh Ksh Bash:.sh .bash .ksh .profile .bashrc .bash_logout .bash_login .bash_profile:"^[ \\t]*#[ \\t]*![ \\t]*/.*bin/(bash|ksh|sh|zsh)"::::::\n\
Tcl:.tcl .tk .itcl .itk::Smart:None::::\n\
VHDL:.vhd .vhdl .vdl:::::::\n\
Verilog:.v:::::::\n\
XML:.xml .xsl .dtd:"\\<(?i\\?xml|!doctype)"::None:::"<>/=""'()+*?|":\n\
X Resources:.Xresources .Xdefaults .nedit:"^[!#].*([Aa]pp|[Xx]).*[Dd]efaults"::::::\n\
Yacc:.y::::::".,/\\`'!|@#%^&*()-=+{}[]"":;<>?~":
nedit.styles: Plain:black:Plain\n\
Comment:gray20:Italic\n\
Keyword:black:Bold\n\
Storage Type:brown:Bold\n\
Storage Type1:saddle brown:Bold\n\
String:darkGreen:Plain\n\
String1:SeaGreen:Plain\n\
String2:darkGreen:Bold\n\
Preprocessor:RoyalBlue4:Plain\n\
Preprocessor1:blue:Plain\n\
Character Const:darkGreen:Plain\n\
Numeric Const:darkGreen:Plain\n\
Identifier:brown:Plain\n\
Identifier1:RoyalBlue4:Plain\n\
Identifier2:SteelBlue:Plain\n\
Subroutine:brown:Plain\n\
Subroutine1:chocolate:Plain\n\
Ada Attributes:plum:Bold\n\
Label:red:Italic\n\
Flag:red:Bold\n\
Text Comment:SteelBlue4:Italic\n\
Text Key:VioletRed4:Bold\n\
Text Key1:VioletRed4:Plain\n\
Text Arg:RoyalBlue4:Bold\n\
Text Arg1:SteelBlue4:Bold\n\
Text Arg2:RoyalBlue4:Plain\n\
Text Escape:gray30:Bold\n\
LaTeX Math:darkGreen:Plain\n\
Pointer:#660000:Bold\n\
Regex:#009944:Bold\n\
Warning:brown2:Italic
nedit.smartIndentInit: C:Default\n\
C++:Default\n\
Python:Default\n\
Matlab:Default
nedit.smartIndentInitCommon: Default
nedit.autoWrap: Newline
nedit.wrapMargin: 0
nedit.autoIndent: Auto
nedit.autoSave: True
nedit.openInTab: True
nedit.saveOldVersion: False
nedit.showMatching: Delimiter
nedit.matchSyntaxBased: True
nedit.highlightSyntax: True
nedit.backlightChars: False
nedit.searchDialogs: False
nedit.beepOnSearchWrap: False
nedit.retainSearchDialogs: False
nedit.searchWraps: True
nedit.stickyCaseSenseButton: True
nedit.repositionDialogs: True
nedit.autoScroll: False
nedit.appendLF: True
nedit.sortOpenPrevMenu: True
nedit.statisticsLine: False
nedit.iSearchLine: False
nedit.sortTabs: False
nedit.tabBar: True
nedit.tabBarHideOne: True
nedit.toolTips: True
nedit.globalTabNavigate: False
nedit.lineNumbers: False
nedit.pathInWindowsMenu: True
nedit.warnFileMods: True
nedit.warnRealFileMods: True
nedit.warnExit: True
nedit.searchMethod: Literal
nedit.textRows: 24
nedit.textCols: 80
nedit.tabDistance: 8
nedit.emulateTabs: 0
nedit.insertTabs: True
nedit.textFont: -*-courier-medium-r-normal--*-120-*-*-*-iso8859-1
nedit.boldHighlightFont: -*-courier-bold-r-normal--*-120-*-*-*-iso8859-1
nedit.italicHighlightFont: -*-courier-medium-o-normal--*-120-*-*-*-iso8859-1
nedit.boldItalicHighlightFont: -*-courier-bold-o-normal--*-120-*-*-*-iso8859-1
nedit.textFgColor: black
nedit.textBgColor: rgb:e5/e5/e5
nedit.selectFgColor: black
nedit.selectBgColor: rgb:cc/cc/cc
nedit.hiliteFgColor: white
nedit.hiliteBgColor: red
nedit.lineNoFgColor: black
nedit.cursorFgColor: black
nedit.smartTags: True
nedit.prefFileRead: True
nedit.titleFormat: {%c} [%s] %f (%S) - %d
因此需要为小写和CamelCase做更多工作,但它运作良好。