Vim Tips Wiki
(Assign tip id + convert to TipNew template + minor clean.)
(→‎Comments: Reply.)
 
(2 intermediate revisions by 2 users not shown)
Line 11: Line 11:
 
|category2=
 
|category2=
 
}}
 
}}
In normal mode, typing <tt>gm</tt> moves the cursor to the middle of the current ''screen'' line. With <tt>'wrap'</tt> on, a long line may be wrapped so it appears on several screen lines. Typing <tt>gm</tt> moves the cursor to the middle of the current line on the screen (or to the end of the line, if it ends before the middle of the screen).
+
In normal mode, typing <code>gm</code> moves the cursor to the middle of the current ''screen'' line. With <code>'wrap'</code> on, a long line may be wrapped so it appears on several screen lines. Typing <code>gm</code> moves the cursor to the middle of the current line on the screen (or to the end of the line, if it ends before the middle of the screen).
   
This tips remaps <tt>gm</tt> so the cursor is moved to the middle of the current physical line. Any leading or trailing whitespace is ignored: the cursor moves to the middle of the text between the first and last non-whitespace characters.
+
This tips remaps <code>gm</code> so the cursor is moved to the middle of the current physical line. Any leading or trailing whitespace is ignored: the cursor moves to the middle of the text between the first and last non-whitespace characters.
   
 
==Code==
 
==Code==
Line 25: Line 25:
 
endfunction
 
endfunction
 
nnoremap <silent> gm :call <SID>Gm()<CR>
 
nnoremap <silent> gm :call <SID>Gm()<CR>
  +
onoremap <silent> gm :call <SID>Gm()<CR>
 
</pre>
 
</pre>
   
Line 37: Line 38:
 
</pre>
 
</pre>
 
[[User:JohnBeckett|JohnBeckett]] 08:22, March 31, 2012 (UTC)
 
[[User:JohnBeckett|JohnBeckett]] 08:22, March 31, 2012 (UTC)
  +
:: onoremap makes sense, xmap doesn't work, because visual mode is exited. One could possibly get around it by using an <expr> mapping.[[User:Chrisbra|Chrisbra]] ([[User talk:Chrisbra|talk]]) 09:53, July 1, 2013 (UTC)
  +
:::Thanks, but I think I meant that we should give an example of where the onoremap does something useful. For example, I just tried it again with a long line that was wrapped over several screen lines. Typing gm went to the middle of the physical line, but going back to the same starting position and typing vgm does ''not'' select the text that the first command moved over. Instead, the gm goes to the middle of the screen line. [[User:JohnBeckett|JohnBeckett]] ([[User talk:JohnBeckett|talk]]) 11:09, July 2, 2013 (UTC)

Latest revision as of 11:09, 2 July 2013

Tip 1671 Printable Monobook Previous Next

created March 15, 2011 · complexity basic · author Kurkale6ka · version 7.0


In normal mode, typing gm moves the cursor to the middle of the current screen line. With 'wrap' on, a long line may be wrapped so it appears on several screen lines. Typing gm moves the cursor to the middle of the current line on the screen (or to the end of the line, if it ends before the middle of the screen).

This tips remaps gm so the cursor is moved to the middle of the current physical line. Any leading or trailing whitespace is ignored: the cursor moves to the middle of the text between the first and last non-whitespace characters.

Code[]

function! s:Gm()
  execute 'normal! ^'
  let first_col = virtcol('.')
  execute 'normal! g_'
  let last_col  = virtcol('.')
  execute 'normal! ' . (first_col + last_col) / 2 . '|'
endfunction
nnoremap <silent> gm :call <SID>Gm()<CR>
onoremap <silent> gm :call <SID>Gm()<CR>

References[]

Comments[]

I have removed the following from the tip because I can't make it do anything useful. If an explanation or fix is available, please restore it.

onoremap <silent> gm :call <SID>Gm()<CR>
" xmap <silent> gm :call <SID>Gm()<CR>

JohnBeckett 08:22, March 31, 2012 (UTC)

onoremap makes sense, xmap doesn't work, because visual mode is exited. One could possibly get around it by using an <expr> mapping.Chrisbra (talk) 09:53, July 1, 2013 (UTC)
Thanks, but I think I meant that we should give an example of where the onoremap does something useful. For example, I just tried it again with a long line that was wrapped over several screen lines. Typing gm went to the middle of the physical line, but going back to the same starting position and typing vgm does not select the text that the first command moved over. Instead, the gm goes to the middle of the screen line. JohnBeckett (talk) 11:09, July 2, 2013 (UTC)