Search and replace contents of yanked text in vim












3















In my vimrc, I have a shortcut to copy the filename with its path to the clipboard.



:nmap cp :let @* = expand("%")


This works fine. Now, I want to replace the contents of this yanked text to



1) replace  with /  
2) remove certain words from the yanked text.


I am familiar with search and replace on regular text but I don't know how to change my vimrc entry to do this every time on the yanked text when I use my shortcut.



So, something like this?



:nmap cp :let @* = expand("%") || %s/\// || %s/<word>//


I am using gvim on windows.










share|improve this question



























    3















    In my vimrc, I have a shortcut to copy the filename with its path to the clipboard.



    :nmap cp :let @* = expand("%")


    This works fine. Now, I want to replace the contents of this yanked text to



    1) replace  with /  
    2) remove certain words from the yanked text.


    I am familiar with search and replace on regular text but I don't know how to change my vimrc entry to do this every time on the yanked text when I use my shortcut.



    So, something like this?



    :nmap cp :let @* = expand("%") || %s/\// || %s/<word>//


    I am using gvim on windows.










    share|improve this question

























      3












      3








      3








      In my vimrc, I have a shortcut to copy the filename with its path to the clipboard.



      :nmap cp :let @* = expand("%")


      This works fine. Now, I want to replace the contents of this yanked text to



      1) replace  with /  
      2) remove certain words from the yanked text.


      I am familiar with search and replace on regular text but I don't know how to change my vimrc entry to do this every time on the yanked text when I use my shortcut.



      So, something like this?



      :nmap cp :let @* = expand("%") || %s/\// || %s/<word>//


      I am using gvim on windows.










      share|improve this question














      In my vimrc, I have a shortcut to copy the filename with its path to the clipboard.



      :nmap cp :let @* = expand("%")


      This works fine. Now, I want to replace the contents of this yanked text to



      1) replace  with /  
      2) remove certain words from the yanked text.


      I am familiar with search and replace on regular text but I don't know how to change my vimrc entry to do this every time on the yanked text when I use my shortcut.



      So, something like this?



      :nmap cp :let @* = expand("%") || %s/\// || %s/<word>//


      I am using gvim on windows.







      search vim replace clipboard






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 16 '18 at 11:30









      InvalidsearchInvalidsearch

      1487




      1487
























          1 Answer
          1






          active

          oldest

          votes


















          6














          The :substitute command works on the buffer contents itself; that's not so useful here. (You could temporarily :put the register / file name, transform it, and then :delete it (back) into a register.) Fortunately, there's an equivalent low-level :help substitute() function that you can apply on a String:



          :nnoremap cp :let @* = substitute(expand("%"), '\', '/', 'g')<CR>


          In fact, expand() directly supports a special substitution :help filename-modifiers, so this would be a (rather obscure) solution, too:



          :nnoremap cp :let @* = expand("%:gs?\?/?")<CR>


          For the additional removal of <word>, you can use another layer of substitute() / append another :gs???. I'll leave that to you.



          Additional critique




          • Your mapping is missing the trailing <CR> to conclude command-line mode.


          • You should use :noremap; it makes the mapping immune to remapping and recursion.


          • % is relative to the current working dir. If you need the full absolute path, you can get that via %:p.

          • Starting your mapping with c is unconventional. It's fine here, because the change command wants a {motion}, and p is not a valid one. In general, I'd rather avoid such clever overloading (as long as you have other unused mapping prefixes still available).






          share|improve this answer



















          • 1





            Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

            – Invalidsearch
            Nov 16 '18 at 13:10














          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          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: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          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%2fstackoverflow.com%2fquestions%2f53336988%2fsearch-and-replace-contents-of-yanked-text-in-vim%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









          6














          The :substitute command works on the buffer contents itself; that's not so useful here. (You could temporarily :put the register / file name, transform it, and then :delete it (back) into a register.) Fortunately, there's an equivalent low-level :help substitute() function that you can apply on a String:



          :nnoremap cp :let @* = substitute(expand("%"), '\', '/', 'g')<CR>


          In fact, expand() directly supports a special substitution :help filename-modifiers, so this would be a (rather obscure) solution, too:



          :nnoremap cp :let @* = expand("%:gs?\?/?")<CR>


          For the additional removal of <word>, you can use another layer of substitute() / append another :gs???. I'll leave that to you.



          Additional critique




          • Your mapping is missing the trailing <CR> to conclude command-line mode.


          • You should use :noremap; it makes the mapping immune to remapping and recursion.


          • % is relative to the current working dir. If you need the full absolute path, you can get that via %:p.

          • Starting your mapping with c is unconventional. It's fine here, because the change command wants a {motion}, and p is not a valid one. In general, I'd rather avoid such clever overloading (as long as you have other unused mapping prefixes still available).






          share|improve this answer



















          • 1





            Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

            – Invalidsearch
            Nov 16 '18 at 13:10


















          6














          The :substitute command works on the buffer contents itself; that's not so useful here. (You could temporarily :put the register / file name, transform it, and then :delete it (back) into a register.) Fortunately, there's an equivalent low-level :help substitute() function that you can apply on a String:



          :nnoremap cp :let @* = substitute(expand("%"), '\', '/', 'g')<CR>


          In fact, expand() directly supports a special substitution :help filename-modifiers, so this would be a (rather obscure) solution, too:



          :nnoremap cp :let @* = expand("%:gs?\?/?")<CR>


          For the additional removal of <word>, you can use another layer of substitute() / append another :gs???. I'll leave that to you.



          Additional critique




          • Your mapping is missing the trailing <CR> to conclude command-line mode.


          • You should use :noremap; it makes the mapping immune to remapping and recursion.


          • % is relative to the current working dir. If you need the full absolute path, you can get that via %:p.

          • Starting your mapping with c is unconventional. It's fine here, because the change command wants a {motion}, and p is not a valid one. In general, I'd rather avoid such clever overloading (as long as you have other unused mapping prefixes still available).






          share|improve this answer



















          • 1





            Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

            – Invalidsearch
            Nov 16 '18 at 13:10
















          6












          6








          6







          The :substitute command works on the buffer contents itself; that's not so useful here. (You could temporarily :put the register / file name, transform it, and then :delete it (back) into a register.) Fortunately, there's an equivalent low-level :help substitute() function that you can apply on a String:



          :nnoremap cp :let @* = substitute(expand("%"), '\', '/', 'g')<CR>


          In fact, expand() directly supports a special substitution :help filename-modifiers, so this would be a (rather obscure) solution, too:



          :nnoremap cp :let @* = expand("%:gs?\?/?")<CR>


          For the additional removal of <word>, you can use another layer of substitute() / append another :gs???. I'll leave that to you.



          Additional critique




          • Your mapping is missing the trailing <CR> to conclude command-line mode.


          • You should use :noremap; it makes the mapping immune to remapping and recursion.


          • % is relative to the current working dir. If you need the full absolute path, you can get that via %:p.

          • Starting your mapping with c is unconventional. It's fine here, because the change command wants a {motion}, and p is not a valid one. In general, I'd rather avoid such clever overloading (as long as you have other unused mapping prefixes still available).






          share|improve this answer













          The :substitute command works on the buffer contents itself; that's not so useful here. (You could temporarily :put the register / file name, transform it, and then :delete it (back) into a register.) Fortunately, there's an equivalent low-level :help substitute() function that you can apply on a String:



          :nnoremap cp :let @* = substitute(expand("%"), '\', '/', 'g')<CR>


          In fact, expand() directly supports a special substitution :help filename-modifiers, so this would be a (rather obscure) solution, too:



          :nnoremap cp :let @* = expand("%:gs?\?/?")<CR>


          For the additional removal of <word>, you can use another layer of substitute() / append another :gs???. I'll leave that to you.



          Additional critique




          • Your mapping is missing the trailing <CR> to conclude command-line mode.


          • You should use :noremap; it makes the mapping immune to remapping and recursion.


          • % is relative to the current working dir. If you need the full absolute path, you can get that via %:p.

          • Starting your mapping with c is unconventional. It's fine here, because the change command wants a {motion}, and p is not a valid one. In general, I'd rather avoid such clever overloading (as long as you have other unused mapping prefixes still available).







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 16 '18 at 12:04









          Ingo KarkatIngo Karkat

          134k14152204




          134k14152204








          • 1





            Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

            – Invalidsearch
            Nov 16 '18 at 13:10
















          • 1





            Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

            – Invalidsearch
            Nov 16 '18 at 13:10










          1




          1





          Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

          – Invalidsearch
          Nov 16 '18 at 13:10







          Thank you kind sir! I used substitute and expand. It works fine. substitute(expand("%:gs?\?/?"),'<word>','','g')<CR> Thank you for the critique. I've fixed them also.

          – Invalidsearch
          Nov 16 '18 at 13:10






















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • 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%2fstackoverflow.com%2fquestions%2f53336988%2fsearch-and-replace-contents-of-yanked-text-in-vim%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

          Bressuire

          Vorschmack

          Quarantine