Previously the `autocmd` to replace the date on the first line if `Last change: ` was present resulted in the cursor being moved in non `help` filetypes due to the substitution failing. Now the substitution is only attempted if the current file is a `help` file.
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Save, call isort on, then reload a python file.
 | 
						|
function! do#isort()
 | 
						|
  if &filetype !=# 'python'
 | 
						|
    echohl ErrorMsg
 | 
						|
    echomsg 'isort only supports python files'
 | 
						|
    echohl None
 | 
						|
  endif
 | 
						|
  write!
 | 
						|
  call system('isort '.expand('%:p'))
 | 
						|
  edit!
 | 
						|
endfunction
 | 
						|
 | 
						|
" Strip white space from right of all lines.
 | 
						|
" TODO: Make do#rstrip_lines work on a range
 | 
						|
function! do#rstrip_lines()
 | 
						|
  let l:line = line('.')
 | 
						|
  let l:column = col('.')
 | 
						|
  execute '%s/\s\+$//e'
 | 
						|
  nohlsearch
 | 
						|
  call cursor(l:line, l:column)
 | 
						|
endfunction
 | 
						|
 | 
						|
" TODO: Strip white space from left of all lines, retains relative indentation.
 | 
						|
 | 
						|
" Set the tab width for the current filetype
 | 
						|
function! do#set_tab_width(width)
 | 
						|
  execute 'setlocal tabstop='.a:width
 | 
						|
  execute 'setlocal shiftwidth='.a:width
 | 
						|
  execute 'setlocal softtabstop='.a:width
 | 
						|
  echo 'Tab width is now '.a:width
 | 
						|
endfunction
 | 
						|
 | 
						|
" Toggle GitHub style bullet checkbox
 | 
						|
function! do#toggle_checkbox()
 | 
						|
  " Get current line
 | 
						|
  let l:line = getline('.')
 | 
						|
  " Get the ' ' or 'x' character from within the task bullet
 | 
						|
  let l:pattern = '[-\*+] \[\zs[ x]\ze]'
 | 
						|
  let l:char = matchstr(l:line, l:pattern)
 | 
						|
  " Toggle the ' ' or 'x' character
 | 
						|
  if l:char ==? 'x'
 | 
						|
    let l:char = ' '
 | 
						|
  else
 | 
						|
    let l:char = 'x'
 | 
						|
  endif
 | 
						|
  " Replace the current line with a new one
 | 
						|
  call setline(line('.'), substitute(l:line, l:pattern, l:char, ''))
 | 
						|
endfunction
 | 
						|
 | 
						|
" Show highlight groups under the cursor
 | 
						|
function! do#cursor_highlight_groups()
 | 
						|
  let l:hi = synIDattr(synID(line('.'),col('.'),1),'name')
 | 
						|
  let l:trans = synIDattr(synID(line('.'),col('.'),0),'name')
 | 
						|
  let l:lo = synIDattr(synIDtrans(synID(line('.'),col('.'),1)),'name')
 | 
						|
  echo 'hi<'.l:hi.'> trans<'.l:trans.'> lo<'.l:lo.'>'
 | 
						|
endfunction
 | 
						|
 | 
						|
" Rename C/C++ include guard
 | 
						|
function! do#rename_include_guard(old)
 | 
						|
  " Prompt for new guard name
 | 
						|
  let l:new = input('Rename include guard: ', a:old)
 | 
						|
  " Get the current position
 | 
						|
  let l:pos = getpos('.')
 | 
						|
  " Replace the old guard name with the new one
 | 
						|
  exec '%s/\(#ifndef\|#define\|#endif\s\+\/\/\)\s\+\zs'.a:old.'/'.l:new.'/g'
 | 
						|
  " Stop highlighting search results
 | 
						|
  nohlsearch
 | 
						|
  " Jump back to the start position
 | 
						|
  call setpos('.', l:pos)
 | 
						|
endfunction
 | 
						|
 | 
						|
" Setup and start a debugging command.
 | 
						|
function! do#debug(...)
 | 
						|
  packadd termdebug
 | 
						|
  let l:command = 'TermdebugCommand'
 | 
						|
  for l:arg in a:000
 | 
						|
    let l:command = l:command.' '.l:arg
 | 
						|
  endfor
 | 
						|
  exec l:command
 | 
						|
endfunction
 | 
						|
 | 
						|
function! do#last_change()
 | 
						|
  if &filetype ==# 'help'
 | 
						|
    " vint: next-line -ProhibitCommandRelyOnUser -ProhibitCommandWithUnintendedSideEffect
 | 
						|
    1s/Last change: \zs.*$/\=strftime('%Y %b %d')/e
 | 
						|
    norm!``
 | 
						|
  endif
 | 
						|
endfunction
 |