Viewing man pages in vim
up vote
7
down vote
favorite
I wrote a function in bash to see manpages
in vim
viman () { man "$@" | vim -R +":set ft=man" - ; }
This works fine, the only problem occurs if I pass a manpage
to it which doesn't exist. It prints that the manpage
doesn't exist but still opens vim
with an empty buffer.
So, I changed the function to check the error code ( which is 16
here ) and exit if the manpage
doesn't exist. The modefied function looks somewhat like this -
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
But, now it doesn't do anything!!
I just want to quit the program if the manpage
doesn't exist otherwise open the manpage
with vim
bash vim man function
add a comment |
up vote
7
down vote
favorite
I wrote a function in bash to see manpages
in vim
viman () { man "$@" | vim -R +":set ft=man" - ; }
This works fine, the only problem occurs if I pass a manpage
to it which doesn't exist. It prints that the manpage
doesn't exist but still opens vim
with an empty buffer.
So, I changed the function to check the error code ( which is 16
here ) and exit if the manpage
doesn't exist. The modefied function looks somewhat like this -
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
But, now it doesn't do anything!!
I just want to quit the program if the manpage
doesn't exist otherwise open the manpage
with vim
bash vim man function
add a comment |
up vote
7
down vote
favorite
up vote
7
down vote
favorite
I wrote a function in bash to see manpages
in vim
viman () { man "$@" | vim -R +":set ft=man" - ; }
This works fine, the only problem occurs if I pass a manpage
to it which doesn't exist. It prints that the manpage
doesn't exist but still opens vim
with an empty buffer.
So, I changed the function to check the error code ( which is 16
here ) and exit if the manpage
doesn't exist. The modefied function looks somewhat like this -
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
But, now it doesn't do anything!!
I just want to quit the program if the manpage
doesn't exist otherwise open the manpage
with vim
bash vim man function
I wrote a function in bash to see manpages
in vim
viman () { man "$@" | vim -R +":set ft=man" - ; }
This works fine, the only problem occurs if I pass a manpage
to it which doesn't exist. It prints that the manpage
doesn't exist but still opens vim
with an empty buffer.
So, I changed the function to check the error code ( which is 16
here ) and exit if the manpage
doesn't exist. The modefied function looks somewhat like this -
viman () { man "$@" | [[ $? == 16 ]] && exit 1 | vim -R +":set ft=man" - ; }
But, now it doesn't do anything!!
I just want to quit the program if the manpage
doesn't exist otherwise open the manpage
with vim
bash vim man function
bash vim man function
edited Dec 11 at 19:02
Jeff Schaller
38k1053123
38k1053123
asked Dec 11 at 18:28
Ritajit Kundu
416
416
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
up vote
7
down vote
accepted
Try this: capture the man output, and if successful launch vim
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
Capturing the output in a text is a simple and brilliant idea. Putting all things together theviman
function is ready -viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
add a comment |
up vote
3
down vote
I like the idea of checking the man
return code; you can't pipe to the test, though. You could just run man
twice:
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
This runs man ... | vim ...
only if the first invocation of man
was successful.
add a comment |
up vote
2
down vote
There's an environment variable called MANPAGER
which can be used to make man
call the command you want for displaying the manpage. The advantage of this is that you call man
directly, and it won't run the pager at all if the manpage didn't exist.
So a wrapper script, say in ~/bin/vimman
:
#! /bin/sh
vim -R +":set ft=man" -
With this in your shell initialisation files somewhere:
export MANPAGER="$HOME/bin/vimman"
And you can directly run man foo
to manpages in Vim.
(Depending on the man
command being used, you could also have:
export MANPAGER='vim -R +":set ft=man" -'
directly instead of a wrapper script.)
If you have a new enough Vim, you can use the --not-a-term
option to stop Vim from complaining about stdin not being a TTY.
Shameless plug: I wrote a small plugin to facilitate using Vim as manpager.
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
@RitajitKundu if you're using yelp, you can directly open manpages in it:yelp man:foo
(askubuntu.com/a/390095/158442)
– muru
Dec 12 at 3:16
add a comment |
up vote
1
down vote
Based on this answer this starts vim and exits if there's nothing in the buffer. The disadvantage is that it starts vim
so the screen "flashes". It also doesn't set an exit code when a man
page isn't found.
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
This is an improvement on Jeff Schaller's answer in that it doesn't load the the man
page twice when it exists. It also doesn't load vim
unnecessarily like my previous example. And it does set an exit code when there's no man
page.
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
Both examples use Bash process substitution in order to avoid the "Vim: Reading from stdin..." message.
Neither loads the page into a variable.
An even more lightweight alternative toman -w
may beman -w
.
– Matteo Italia
Dec 12 at 0:53
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
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',
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
});
}
});
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%2funix.stackexchange.com%2fquestions%2f487415%2fviewing-man-pages-in-vim%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
7
down vote
accepted
Try this: capture the man output, and if successful launch vim
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
Capturing the output in a text is a simple and brilliant idea. Putting all things together theviman
function is ready -viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
add a comment |
up vote
7
down vote
accepted
Try this: capture the man output, and if successful launch vim
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
Capturing the output in a text is a simple and brilliant idea. Putting all things together theviman
function is ready -viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
add a comment |
up vote
7
down vote
accepted
up vote
7
down vote
accepted
Try this: capture the man output, and if successful launch vim
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
Try this: capture the man output, and if successful launch vim
viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man" - ; }
answered Dec 11 at 18:45
glenn jackman
50.1k569106
50.1k569106
Capturing the output in a text is a simple and brilliant idea. Putting all things together theviman
function is ready -viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
add a comment |
Capturing the output in a text is a simple and brilliant idea. Putting all things together theviman
function is ready -viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
Capturing the output in a text is a simple and brilliant idea. Putting all things together the
viman
function is ready - viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
Capturing the output in a text is a simple and brilliant idea. Putting all things together the
viman
function is ready - viman () { text=$(man "$@") && echo "$text" | vim -R +":set ft=man nomod nonu noma nolist colorcolumn=" - ; }
– Ritajit Kundu
Dec 11 at 19:01
add a comment |
up vote
3
down vote
I like the idea of checking the man
return code; you can't pipe to the test, though. You could just run man
twice:
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
This runs man ... | vim ...
only if the first invocation of man
was successful.
add a comment |
up vote
3
down vote
I like the idea of checking the man
return code; you can't pipe to the test, though. You could just run man
twice:
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
This runs man ... | vim ...
only if the first invocation of man
was successful.
add a comment |
up vote
3
down vote
up vote
3
down vote
I like the idea of checking the man
return code; you can't pipe to the test, though. You could just run man
twice:
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
This runs man ... | vim ...
only if the first invocation of man
was successful.
I like the idea of checking the man
return code; you can't pipe to the test, though. You could just run man
twice:
viman () { man "$@" >/dev/null 2>&1 && man "$@" | vim -R +":set ft=man" - ; }
This runs man ... | vim ...
only if the first invocation of man
was successful.
edited Dec 11 at 21:21
answered Dec 11 at 19:01
Jeff Schaller
38k1053123
38k1053123
add a comment |
add a comment |
up vote
2
down vote
There's an environment variable called MANPAGER
which can be used to make man
call the command you want for displaying the manpage. The advantage of this is that you call man
directly, and it won't run the pager at all if the manpage didn't exist.
So a wrapper script, say in ~/bin/vimman
:
#! /bin/sh
vim -R +":set ft=man" -
With this in your shell initialisation files somewhere:
export MANPAGER="$HOME/bin/vimman"
And you can directly run man foo
to manpages in Vim.
(Depending on the man
command being used, you could also have:
export MANPAGER='vim -R +":set ft=man" -'
directly instead of a wrapper script.)
If you have a new enough Vim, you can use the --not-a-term
option to stop Vim from complaining about stdin not being a TTY.
Shameless plug: I wrote a small plugin to facilitate using Vim as manpager.
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
@RitajitKundu if you're using yelp, you can directly open manpages in it:yelp man:foo
(askubuntu.com/a/390095/158442)
– muru
Dec 12 at 3:16
add a comment |
up vote
2
down vote
There's an environment variable called MANPAGER
which can be used to make man
call the command you want for displaying the manpage. The advantage of this is that you call man
directly, and it won't run the pager at all if the manpage didn't exist.
So a wrapper script, say in ~/bin/vimman
:
#! /bin/sh
vim -R +":set ft=man" -
With this in your shell initialisation files somewhere:
export MANPAGER="$HOME/bin/vimman"
And you can directly run man foo
to manpages in Vim.
(Depending on the man
command being used, you could also have:
export MANPAGER='vim -R +":set ft=man" -'
directly instead of a wrapper script.)
If you have a new enough Vim, you can use the --not-a-term
option to stop Vim from complaining about stdin not being a TTY.
Shameless plug: I wrote a small plugin to facilitate using Vim as manpager.
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
@RitajitKundu if you're using yelp, you can directly open manpages in it:yelp man:foo
(askubuntu.com/a/390095/158442)
– muru
Dec 12 at 3:16
add a comment |
up vote
2
down vote
up vote
2
down vote
There's an environment variable called MANPAGER
which can be used to make man
call the command you want for displaying the manpage. The advantage of this is that you call man
directly, and it won't run the pager at all if the manpage didn't exist.
So a wrapper script, say in ~/bin/vimman
:
#! /bin/sh
vim -R +":set ft=man" -
With this in your shell initialisation files somewhere:
export MANPAGER="$HOME/bin/vimman"
And you can directly run man foo
to manpages in Vim.
(Depending on the man
command being used, you could also have:
export MANPAGER='vim -R +":set ft=man" -'
directly instead of a wrapper script.)
If you have a new enough Vim, you can use the --not-a-term
option to stop Vim from complaining about stdin not being a TTY.
Shameless plug: I wrote a small plugin to facilitate using Vim as manpager.
There's an environment variable called MANPAGER
which can be used to make man
call the command you want for displaying the manpage. The advantage of this is that you call man
directly, and it won't run the pager at all if the manpage didn't exist.
So a wrapper script, say in ~/bin/vimman
:
#! /bin/sh
vim -R +":set ft=man" -
With this in your shell initialisation files somewhere:
export MANPAGER="$HOME/bin/vimman"
And you can directly run man foo
to manpages in Vim.
(Depending on the man
command being used, you could also have:
export MANPAGER='vim -R +":set ft=man" -'
directly instead of a wrapper script.)
If you have a new enough Vim, you can use the --not-a-term
option to stop Vim from complaining about stdin not being a TTY.
Shameless plug: I wrote a small plugin to facilitate using Vim as manpager.
edited Dec 12 at 1:21
answered Dec 12 at 0:34
muru
35.7k584159
35.7k584159
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
@RitajitKundu if you're using yelp, you can directly open manpages in it:yelp man:foo
(askubuntu.com/a/390095/158442)
– muru
Dec 12 at 3:16
add a comment |
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
@RitajitKundu if you're using yelp, you can directly open manpages in it:yelp man:foo
(askubuntu.com/a/390095/158442)
– muru
Dec 12 at 3:16
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
This is also a nice solution, but let me ask you, I depend a lot on manpage than on google or at least try to, so I've written different wrappers to make manpager interesting , for there is a gui manpager that works with yelp, now I am wondering if the yelp will be able to work with this?
– Ritajit Kundu
Dec 12 at 3:12
@RitajitKundu if you're using yelp, you can directly open manpages in it:
yelp man:foo
(askubuntu.com/a/390095/158442)– muru
Dec 12 at 3:16
@RitajitKundu if you're using yelp, you can directly open manpages in it:
yelp man:foo
(askubuntu.com/a/390095/158442)– muru
Dec 12 at 3:16
add a comment |
up vote
1
down vote
Based on this answer this starts vim and exits if there's nothing in the buffer. The disadvantage is that it starts vim
so the screen "flashes". It also doesn't set an exit code when a man
page isn't found.
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
This is an improvement on Jeff Schaller's answer in that it doesn't load the the man
page twice when it exists. It also doesn't load vim
unnecessarily like my previous example. And it does set an exit code when there's no man
page.
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
Both examples use Bash process substitution in order to avoid the "Vim: Reading from stdin..." message.
Neither loads the page into a variable.
An even more lightweight alternative toman -w
may beman -w
.
– Matteo Italia
Dec 12 at 0:53
add a comment |
up vote
1
down vote
Based on this answer this starts vim and exits if there's nothing in the buffer. The disadvantage is that it starts vim
so the screen "flashes". It also doesn't set an exit code when a man
page isn't found.
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
This is an improvement on Jeff Schaller's answer in that it doesn't load the the man
page twice when it exists. It also doesn't load vim
unnecessarily like my previous example. And it does set an exit code when there's no man
page.
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
Both examples use Bash process substitution in order to avoid the "Vim: Reading from stdin..." message.
Neither loads the page into a variable.
An even more lightweight alternative toman -w
may beman -w
.
– Matteo Italia
Dec 12 at 0:53
add a comment |
up vote
1
down vote
up vote
1
down vote
Based on this answer this starts vim and exits if there's nothing in the buffer. The disadvantage is that it starts vim
so the screen "flashes". It also doesn't set an exit code when a man
page isn't found.
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
This is an improvement on Jeff Schaller's answer in that it doesn't load the the man
page twice when it exists. It also doesn't load vim
unnecessarily like my previous example. And it does set an exit code when there's no man
page.
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
Both examples use Bash process substitution in order to avoid the "Vim: Reading from stdin..." message.
Neither loads the page into a variable.
Based on this answer this starts vim and exits if there's nothing in the buffer. The disadvantage is that it starts vim
so the screen "flashes". It also doesn't set an exit code when a man
page isn't found.
viman () { vim -R +':set ft=man|exe !search(".")?"quit!":""' <(man "$@" 2>/dev/null); }
This is an improvement on Jeff Schaller's answer in that it doesn't load the the man
page twice when it exists. It also doesn't load vim
unnecessarily like my previous example. And it does set an exit code when there's no man
page.
viman () { man -f "$@" >/dev/null 2>&1 && vim -R +":set ft=man" <(man "$@"); }
Both examples use Bash process substitution in order to avoid the "Vim: Reading from stdin..." message.
Neither loads the page into a variable.
answered Dec 11 at 23:57
Dennis Williamson
5,35812332
5,35812332
An even more lightweight alternative toman -w
may beman -w
.
– Matteo Italia
Dec 12 at 0:53
add a comment |
An even more lightweight alternative toman -w
may beman -w
.
– Matteo Italia
Dec 12 at 0:53
An even more lightweight alternative to
man -w
may be man -w
.– Matteo Italia
Dec 12 at 0:53
An even more lightweight alternative to
man -w
may be man -w
.– Matteo Italia
Dec 12 at 0:53
add a comment |
Thanks for contributing an answer to Unix & Linux 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.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2funix.stackexchange.com%2fquestions%2f487415%2fviewing-man-pages-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