From 71c29cbaee974b6ab7c9a89b4771043f19fb957f Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Tue, 3 Jan 2012 14:11:45 +0100 Subject: [PATCH] vimrc: Move new text objects to mappings section. --- vimrc | 86 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 44 insertions(+), 42 deletions(-) diff --git a/vimrc b/vimrc index 6516546..4699746 100644 --- a/vimrc +++ b/vimrc @@ -339,6 +339,50 @@ inoremap u " And for (delete word before cursor). inoremap u +if has('eval') +" New text-objects ii and ai to work on text with the same indentation. Thanks +" to http://vim.wikia.com/index.php?title=Indent_text_object&oldid=27126 +" (visited on 2011-11-19). + onoremap ai :call IndTxtObj(0) + onoremap ii :call IndTxtObj(1) + vnoremap ai :call IndTxtObj(0)gv + vnoremap ii :call IndTxtObj(1)gv + + function! s:IndTxtObj(inner) + let curline = line(".") + let lastline = line("$") + let i = indent(line(".")) - &shiftwidth * (v:count1 - 1) + let i = i < 0 ? 0 : i + if getline(".") !~ "^\\s*$" + let p = line(".") - 1 + let nextblank = getline(p) =~ "^\\s*$" + while p > 0 + \ && ((i == 0 && !nextblank) + \ || (i > 0 && ((indent(p) >= i + \ && !(nextblank && a:inner)) + \ || (nextblank && !a:inner)))) + - + let p = line(".") - 1 + let nextblank = getline(p) =~ "^\\s*$" + endwhile + normal! 0V + call cursor(curline, 0) + let p = line(".") + 1 + let nextblank = getline(p) =~ "^\\s*$" + while p <= lastline + \ && ((i == 0 && !nextblank) + \ || (i > 0 && ((indent(p) >= i + \ && !(nextblank && a:inner)) + \ || (nextblank && !a:inner)))) + + + let p = line(".") + 1 + let nextblank = getline(p) =~ "^\\s*$" + endwhile + normal! $ + endif + endfunction +endif + " ABBREVIATIONS @@ -507,48 +551,6 @@ endif " CUSTOM FUNCTIONS AND COMMANDS if has('eval') -" New text-objects ii and ai to work on text with the same indentation. Thanks -" to http://vim.wikia.com/index.php?title=Indent_text_object&oldid=27126 -" (visited on 2011-11-19). - onoremap ai :call IndTxtObj(0) - onoremap ii :call IndTxtObj(1) - vnoremap ai :call IndTxtObj(0)gv - vnoremap ii :call IndTxtObj(1)gv - - function! s:IndTxtObj(inner) - let curline = line(".") - let lastline = line("$") - let i = indent(line(".")) - &shiftwidth * (v:count1 - 1) - let i = i < 0 ? 0 : i - if getline(".") !~ "^\\s*$" - let p = line(".") - 1 - let nextblank = getline(p) =~ "^\\s*$" - while p > 0 - \ && ((i == 0 && !nextblank) - \ || (i > 0 && ((indent(p) >= i - \ && !(nextblank && a:inner)) - \ || (nextblank && !a:inner)))) - - - let p = line(".") - 1 - let nextblank = getline(p) =~ "^\\s*$" - endwhile - normal! 0V - call cursor(curline, 0) - let p = line(".") + 1 - let nextblank = getline(p) =~ "^\\s*$" - while p <= lastline - \ && ((i == 0 && !nextblank) - \ || (i > 0 && ((indent(p) >= i - \ && !(nextblank && a:inner)) - \ || (nextblank && !a:inner)))) - + - let p = line(".") + 1 - let nextblank = getline(p) =~ "^\\s*$" - endwhile - normal! $ - endif - endfunction - " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. Thanks to the " vimrc_example.vim file in Vim's source. Modified to use the same filetype -- 2.45.2