creating a “:KeepCursor” commandHow to undo last command in command line?How can I repeat last Ex-mode command in normal mode?Copy text based on delimiting stringsHow to simulate Return and Escape for global command without using Control-V?Use pattern of global ex command found on a line to substitute in another lineHow to pipe *characters* to cmd ( `:!` )Search pattern for an if statement that isn't followed by curly brace on the next lineSetting the search pattern to just a portion of a regex patternIs there a setting that hides the last colon-command entered?':norm dtxdty' works different than '0dtxdty', what's happening?

Did arcade monitors have same pixel aspect ratio as TV sets?

Does IPv6 have similar concept of network mask?

Why is so much work done on numerical verification of the Riemann Hypothesis?

How does a computer interpret real numbers?

Fear of getting stuck on one programming language / technology that is not used in my country

Does the Linux kernel need a file system to run?

How to hide some fields of struct in C?

Does the UK parliament need to pass secondary legislation to accept the Article 50 extension

Electoral considerations aside, what are potential benefits, for the US, of policy changes proposed by the tweet recognizing Golan annexation?

What is the highest possible scrabble score for placing a single tile

System.QueryException unexpected token

Is aluminum electrical wire used on aircraft?

Why does a simple loop result in ASYNC_NETWORK_IO waits?

Can a College of Swords bard use a Blade Flourish option on an opportunity attack provoked by their own Dissonant Whispers spell?

Why Shazam when there is already Superman?

Temporarily disable WLAN internet access for children, but allow it for adults

Why is the "ls" command showing permissions of files in a FAT32 partition?

How to cover method return statement in Apex Class?

Can I say "fingers" when referring to toes?

Plot of a tornado-shaped surface

Why is it that I can sometimes guess the next note?

What is the evidence for the "tyranny of the majority problem" in a direct democracy context?

creating a ":KeepCursor" command

Why did the EU agree to delay the Brexit deadline?



creating a “:KeepCursor” command


How to undo last command in command line?How can I repeat last Ex-mode command in normal mode?Copy text based on delimiting stringsHow to simulate Return and Escape for global command without using Control-V?Use pattern of global ex command found on a line to substitute in another lineHow to pipe *characters* to cmd ( `:!` )Search pattern for an if statement that isn't followed by curly brace on the next lineSetting the search pattern to just a portion of a regex patternIs there a setting that hides the last colon-command entered?':norm dtxdty' works different than '0dtxdty', what's happening?













2















I'd like to make a command that works like this: :KeepCursor cmd will the given execute ex command string, then restore the cursor's position. A primary example is:



:KeepCursor normal! *


which would perform a keyword search without jumping to the next match. This can of course be accomplished in other ways, but it's a good demonstration of the functionality I'm looking for, which I want to work in every possible case.



This is my attempt so far. I'm using feedkeys+imtx because I'd like the command to behave exactly as though I typed it. I put the cursor restoration in a finally so it works even if the command encounters an error.



function! s:keepcursor(qargs)
let l:view = winsaveview()
let l:winid = win_getid()
try
call feedkeys(':'.a:qargs."<cr>", 'imtx')
finally
if win_getid() != l:winid
if !win_id2win(l:winid)
return
endif
call win_gotoid(l:winid)
endif
call winrestview(l:view)
endtry
endfunction

command! -nargs=* KeepCursor call s:keepcursor(<q-args>)


However, it does not seem to work. Using :KeepCursor normal! * prints the search string but does not highlight anything. Running :hlsearch afterwards highlights the wrong thing.



My questions are a) can it be explained why this doesn't work and b) can such a :KeepCursor command be written?










share|improve this question


























    2















    I'd like to make a command that works like this: :KeepCursor cmd will the given execute ex command string, then restore the cursor's position. A primary example is:



    :KeepCursor normal! *


    which would perform a keyword search without jumping to the next match. This can of course be accomplished in other ways, but it's a good demonstration of the functionality I'm looking for, which I want to work in every possible case.



    This is my attempt so far. I'm using feedkeys+imtx because I'd like the command to behave exactly as though I typed it. I put the cursor restoration in a finally so it works even if the command encounters an error.



    function! s:keepcursor(qargs)
    let l:view = winsaveview()
    let l:winid = win_getid()
    try
    call feedkeys(':'.a:qargs."<cr>", 'imtx')
    finally
    if win_getid() != l:winid
    if !win_id2win(l:winid)
    return
    endif
    call win_gotoid(l:winid)
    endif
    call winrestview(l:view)
    endtry
    endfunction

    command! -nargs=* KeepCursor call s:keepcursor(<q-args>)


    However, it does not seem to work. Using :KeepCursor normal! * prints the search string but does not highlight anything. Running :hlsearch afterwards highlights the wrong thing.



    My questions are a) can it be explained why this doesn't work and b) can such a :KeepCursor command be written?










    share|improve this question
























      2












      2








      2








      I'd like to make a command that works like this: :KeepCursor cmd will the given execute ex command string, then restore the cursor's position. A primary example is:



      :KeepCursor normal! *


      which would perform a keyword search without jumping to the next match. This can of course be accomplished in other ways, but it's a good demonstration of the functionality I'm looking for, which I want to work in every possible case.



      This is my attempt so far. I'm using feedkeys+imtx because I'd like the command to behave exactly as though I typed it. I put the cursor restoration in a finally so it works even if the command encounters an error.



      function! s:keepcursor(qargs)
      let l:view = winsaveview()
      let l:winid = win_getid()
      try
      call feedkeys(':'.a:qargs."<cr>", 'imtx')
      finally
      if win_getid() != l:winid
      if !win_id2win(l:winid)
      return
      endif
      call win_gotoid(l:winid)
      endif
      call winrestview(l:view)
      endtry
      endfunction

      command! -nargs=* KeepCursor call s:keepcursor(<q-args>)


      However, it does not seem to work. Using :KeepCursor normal! * prints the search string but does not highlight anything. Running :hlsearch afterwards highlights the wrong thing.



      My questions are a) can it be explained why this doesn't work and b) can such a :KeepCursor command be written?










      share|improve this question














      I'd like to make a command that works like this: :KeepCursor cmd will the given execute ex command string, then restore the cursor's position. A primary example is:



      :KeepCursor normal! *


      which would perform a keyword search without jumping to the next match. This can of course be accomplished in other ways, but it's a good demonstration of the functionality I'm looking for, which I want to work in every possible case.



      This is my attempt so far. I'm using feedkeys+imtx because I'd like the command to behave exactly as though I typed it. I put the cursor restoration in a finally so it works even if the command encounters an error.



      function! s:keepcursor(qargs)
      let l:view = winsaveview()
      let l:winid = win_getid()
      try
      call feedkeys(':'.a:qargs."<cr>", 'imtx')
      finally
      if win_getid() != l:winid
      if !win_id2win(l:winid)
      return
      endif
      call win_gotoid(l:winid)
      endif
      call winrestview(l:view)
      endtry
      endfunction

      command! -nargs=* KeepCursor call s:keepcursor(<q-args>)


      However, it does not seem to work. Using :KeepCursor normal! * prints the search string but does not highlight anything. Running :hlsearch afterwards highlights the wrong thing.



      My questions are a) can it be explained why this doesn't work and b) can such a :KeepCursor command be written?







      search command-line cursor command






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 5 hours ago









      MassMass

      6,4101420




      6,4101420




















          1 Answer
          1






          active

          oldest

          votes


















          4















          Can it be written?




          Yup.



          command! -nargs=* -complete=command KeepCursor
          let [s:view, s:win] = [winsaveview(), win_getid()] |
          try |
          execute <q-args> |
          finally |
          if win_id2win(s:win) |
          call win_gotoid(s:win) |
          endif |
          keepjumps call winrestview(s:view) |
          endtry



          Can it be explained why this doesn't work




          There is a lot going on here. I haven't debugged anything, but my guess is feedkeys() is part of your problem. I typically avoid feedkeys() as it is often easier to debug other methods.






          share|improve this answer
























            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "599"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fvi.stackexchange.com%2fquestions%2f19277%2fcreating-a-keepcursor-command%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            4















            Can it be written?




            Yup.



            command! -nargs=* -complete=command KeepCursor
            let [s:view, s:win] = [winsaveview(), win_getid()] |
            try |
            execute <q-args> |
            finally |
            if win_id2win(s:win) |
            call win_gotoid(s:win) |
            endif |
            keepjumps call winrestview(s:view) |
            endtry



            Can it be explained why this doesn't work




            There is a lot going on here. I haven't debugged anything, but my guess is feedkeys() is part of your problem. I typically avoid feedkeys() as it is often easier to debug other methods.






            share|improve this answer





























              4















              Can it be written?




              Yup.



              command! -nargs=* -complete=command KeepCursor
              let [s:view, s:win] = [winsaveview(), win_getid()] |
              try |
              execute <q-args> |
              finally |
              if win_id2win(s:win) |
              call win_gotoid(s:win) |
              endif |
              keepjumps call winrestview(s:view) |
              endtry



              Can it be explained why this doesn't work




              There is a lot going on here. I haven't debugged anything, but my guess is feedkeys() is part of your problem. I typically avoid feedkeys() as it is often easier to debug other methods.






              share|improve this answer



























                4












                4








                4








                Can it be written?




                Yup.



                command! -nargs=* -complete=command KeepCursor
                let [s:view, s:win] = [winsaveview(), win_getid()] |
                try |
                execute <q-args> |
                finally |
                if win_id2win(s:win) |
                call win_gotoid(s:win) |
                endif |
                keepjumps call winrestview(s:view) |
                endtry



                Can it be explained why this doesn't work




                There is a lot going on here. I haven't debugged anything, but my guess is feedkeys() is part of your problem. I typically avoid feedkeys() as it is often easier to debug other methods.






                share|improve this answer
















                Can it be written?




                Yup.



                command! -nargs=* -complete=command KeepCursor
                let [s:view, s:win] = [winsaveview(), win_getid()] |
                try |
                execute <q-args> |
                finally |
                if win_id2win(s:win) |
                call win_gotoid(s:win) |
                endif |
                keepjumps call winrestview(s:view) |
                endtry



                Can it be explained why this doesn't work




                There is a lot going on here. I haven't debugged anything, but my guess is feedkeys() is part of your problem. I typically avoid feedkeys() as it is often easier to debug other methods.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited 3 hours ago

























                answered 5 hours ago









                Peter RinckerPeter Rincker

                10.4k11828




                10.4k11828



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Vi and Vim Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fvi.stackexchange.com%2fquestions%2f19277%2fcreating-a-keepcursor-command%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    Möglingen Índice Localización Historia Demografía Referencias Enlaces externos Menú de navegación48°53′18″N 9°07′45″E / 48.888333333333, 9.129166666666748°53′18″N 9°07′45″E / 48.888333333333, 9.1291666666667Sitio web oficial Mapa de Möglingen«Gemeinden in Deutschland nach Fläche, Bevölkerung und Postleitzahl am 30.09.2016»Möglingen

                    Virtualbox - Configuration error: Querying “UUID” failed (VERR_CFGM_VALUE_NOT_FOUND)“VERR_SUPLIB_WORLD_WRITABLE” error when trying to installing OS in virtualboxVirtual Box Kernel errorFailed to open a seesion for the virtual machineFailed to open a session for the virtual machineUbuntu 14.04 LTS Virtualbox errorcan't use VM VirtualBoxusing virtualboxI can't run Linux-64 Bit on VirtualBoxUnable to insert the virtual optical disk (VBoxguestaddition) in virtual machine for ubuntu server in win 10VirtuaBox in Ubuntu 18.04 Issues with Win10.ISO Installation

                    Antonio De Lisio Carrera Referencias Menú de navegación«Caracas: evolución relacional multipleja»«Cuando los gobiernos subestiman a las localidades: L a Iniciativa para la Integración de la Infraestructura Regional Suramericana (IIRSA) en la frontera Colombo-Venezolana»«Maestría en Planificación Integral del Ambiente»«La Metrópoli Caraqueña: Expansión Simplificadora o Articulación Diversificante»«La Metrópoli Caraqueña: Expansión Simplificadora o Articulación Diversificante»«Conózcanos»«Caracas: evolución relacional multipleja»«La Metrópoli Caraqueña: Expansión Simplificadora o Articulación Diversificante»