Search and replace contents of yanked text in vim
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
add a comment |
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
add a comment |
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
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
search vim replace clipboard
asked Nov 16 '18 at 11:30
InvalidsearchInvalidsearch
1487
1487
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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 thec
hange command wants a{motion}
, andp
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).
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
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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 thec
hange command wants a{motion}
, andp
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).
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
add a comment |
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 thec
hange command wants a{motion}
, andp
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).
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
add a comment |
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 thec
hange command wants a{motion}
, andp
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).
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 thec
hange command wants a{motion}
, andp
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).
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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