| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Vim filetype plugin file | 
					
						
							|  |  |  | " Language:     Abaqus finite element input file (www.abaqus.com) | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  | " Maintainer:   Carl Osterwisch <costerwi@gmail.com> | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  | " Last Change:  2022 Oct 08 | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  | "               2024 Jan 14 by Vim Project (browsefilter) | 
					
						
							| 
									
										
										
										
											2024-06-03 20:40:45 +02:00
										 |  |  | "               2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring') | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Only do this when not done yet for this buffer | 
					
						
							|  |  |  | if exists("b:did_ftplugin") | finish | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Don't load another plugin for this buffer | 
					
						
							|  |  |  | let b:did_ftplugin = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Save the compatibility options and temporarily switch to vim defaults | 
					
						
							|  |  |  | let s:cpo_save = &cpoptions | 
					
						
							|  |  |  | set cpoptions&vim | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Set the format of the include file specification for Abaqus | 
					
						
							|  |  |  | " Used in :check gf ^wf [i and other commands | 
					
						
							|  |  |  | setlocal include=\\<\\cINPUT\\s*= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Remove characters up to the first = when evaluating filenames | 
					
						
							|  |  |  | setlocal includeexpr=substitute(v:fname,'.\\{-}=','','') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-10 09:47:34 +00:00
										 |  |  | " Remove comma from valid filename characters since it is used to | 
					
						
							|  |  |  | " separate keyword parameters | 
					
						
							|  |  |  | setlocal isfname-=, | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Define format of comment lines (see 'formatoptions' for uses) | 
					
						
							|  |  |  | setlocal comments=:** | 
					
						
							| 
									
										
										
										
											2024-06-03 20:40:45 +02:00
										 |  |  | setlocal commentstring=**\ %s | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | " Definitions start with a * and assign a NAME, NSET, or ELSET | 
					
						
							|  |  |  | " Used in [d ^wd and other commands | 
					
						
							|  |  |  | setlocal define=^\\*\\a.*\\c\\(NAME\\\|NSET\\\|ELSET\\)\\s*= | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | " Abaqus keywords and identifiers may include a - character | 
					
						
							|  |  |  | setlocal iskeyword+=- | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  | let b:undo_ftplugin = "setlocal include< includeexpr< isfname<" | 
					
						
							|  |  |  |     \ . " comments< commentstring< define< iskeyword<" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if has("folding") | 
					
						
							|  |  |  |     " Fold all lines that do not begin with * | 
					
						
							|  |  |  |     setlocal foldexpr=getline(v:lnum)[0]!=\"\*\" | 
					
						
							|  |  |  |     setlocal foldmethod=expr | 
					
						
							|  |  |  |     let b:undo_ftplugin .= " foldexpr< foldmethod<" | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Set the file browse filter (currently only supported under Win32 gui) | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  | if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter") | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  |     let b:browsefilter = "Abaqus Input Files (*.inp *.inc)\t*.inp;*.inc\n" . | 
					
						
							|  |  |  |     \ "Abaqus Results (*.dat)\t*.dat\n" . | 
					
						
							| 
									
										
										
										
											2024-01-14 20:59:02 +01:00
										 |  |  |     \ "Abaqus Messages (*.pre, *.msg, *.sta)\t*.pre;*.msg;*.sta\n" | 
					
						
							|  |  |  |     if has("win32") | 
					
						
							|  |  |  |         let b:browsefilter .= "All Files (*.*)\t*\n" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         let b:browsefilter .= "All Files (*)\t*\n" | 
					
						
							|  |  |  |     endif | 
					
						
							| 
									
										
										
										
											2012-04-30 15:56:52 +02:00
										 |  |  |     let b:undo_ftplugin .= "|unlet! b:browsefilter" | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  | " Define patterns for the matchit plugin | 
					
						
							|  |  |  | if exists("loaded_matchit") && !exists("b:match_words") | 
					
						
							|  |  |  |     let b:match_ignorecase = 1 | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  |     let b:match_words = | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  |     \ '\*part:\*end\s*part,' . | 
					
						
							|  |  |  |     \ '\*assembly:\*end\s*assembly,' . | 
					
						
							|  |  |  |     \ '\*instance:\*end\s*instance,' . | 
					
						
							|  |  |  |     \ '\*step:\*end\s*step' | 
					
						
							| 
									
										
										
										
											2012-04-30 15:56:52 +02:00
										 |  |  |     let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words" | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  | if !exists("no_plugin_maps") && !exists("no_abaqus_maps") | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |   " Map [[ and ]] keys to move [count] keywords backward or forward | 
					
						
							|  |  |  |   nnoremap <silent><buffer> ]] :call <SID>Abaqus_NextKeyword(1)<CR> | 
					
						
							|  |  |  |   nnoremap <silent><buffer> [[ :call <SID>Abaqus_NextKeyword(-1)<CR> | 
					
						
							|  |  |  |   function! <SID>Abaqus_NextKeyword(direction) | 
					
						
							|  |  |  |     .mark ' | 
					
						
							|  |  |  |     if a:direction < 0 | 
					
						
							|  |  |  |       let flags = 'b' | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       let flags = '' | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  |     let l:count = abs(a:direction) * v:count1 | 
					
						
							|  |  |  |     while l:count > 0 && search("^\\*\\a", flags) | 
					
						
							|  |  |  |       let l:count -= 1 | 
					
						
							|  |  |  |     endwhile | 
					
						
							|  |  |  |   endfunction | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |   " Map \\ to toggle commenting of the current line or range | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  |   noremap <silent><buffer> <LocalLeader><LocalLeader> | 
					
						
							|  |  |  |       \ :call <SID>Abaqus_ToggleComment()<CR>j | 
					
						
							|  |  |  |   function! <SID>Abaqus_ToggleComment() range | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |     if strpart(getline(a:firstline), 0, 2) == "**" | 
					
						
							|  |  |  |       " Un-comment all lines in range | 
					
						
							|  |  |  |       silent execute a:firstline . ',' . a:lastline . 's/^\*\*//' | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       " Comment all lines in range | 
					
						
							|  |  |  |       silent execute a:firstline . ',' . a:lastline . 's/^/**/' | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  |   endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   " Map \s to swap first two comma separated fields | 
					
						
							|  |  |  |   noremap <silent><buffer> <LocalLeader>s :call <SID>Abaqus_Swap()<CR> | 
					
						
							|  |  |  |   function! <SID>Abaqus_Swap() range | 
					
						
							|  |  |  |     silent execute a:firstline . ',' . a:lastline . 's/\([^*,]*\),\([^,]*\)/\2,\1/' | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  |   endfunction | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]" | 
					
						
							|  |  |  |       \ . "|unmap <buffer> <LocalLeader><LocalLeader>" | 
					
						
							| 
									
										
										
										
											2022-10-16 13:11:12 +01:00
										 |  |  |       \ . "|unmap <buffer> <LocalLeader>s" | 
					
						
							| 
									
										
										
										
											2022-08-08 15:42:38 +01:00
										 |  |  | endif | 
					
						
							| 
									
										
										
										
											2010-01-06 20:54:52 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-04-30 15:56:52 +02:00
										 |  |  | " Undo must be done in nocompatible mode for <LocalLeader>. | 
					
						
							| 
									
										
										
										
											2022-05-09 19:50:35 +01:00
										 |  |  | let b:undo_ftplugin = "let b:cpo_save = &cpoptions|" | 
					
						
							| 
									
										
										
										
											2012-04-30 15:56:52 +02:00
										 |  |  |     \ . "set cpoptions&vim|" | 
					
						
							|  |  |  |     \ . b:undo_ftplugin | 
					
						
							| 
									
										
										
										
											2022-05-09 19:50:35 +01:00
										 |  |  |     \ . "|let &cpoptions = b:cpo_save" | 
					
						
							|  |  |  |     \ . "|unlet b:cpo_save" | 
					
						
							| 
									
										
										
										
											2012-04-30 15:56:52 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-06-13 20:20:40 +00:00
										 |  |  | " Restore saved compatibility options | 
					
						
							|  |  |  | let &cpoptions = s:cpo_save | 
					
						
							| 
									
										
										
										
											2012-03-11 15:57:40 +01:00
										 |  |  | unlet s:cpo_save |