如何在 Linux 中的 VIM 状态行中添加主机名显示?

如何在 Linux 中的 VIM 状态行中添加主机名显示?

我想将短主机名添加到 vim 中的状态行。我环顾四周,但没有安装 Powerline 插件,这似乎不可能。下面是我的.vimrc.我怎样才能将hostname变量添加到其中?

let hostname=system('hostname -s')
set laststatus=2
set statusline+=%F\ %P\ %c:%l

更新:要删除 vim 状态行上主机名后面出现的“^@”(我怀疑是主机名调用中的换行符),我使用以下命令:

let hostname=system('echo -n $LOGNAME@$(/bin/hostname -s)')

答案1

vim有一个hostname()函数(参见:h hostname()),所以你可以这样做

:set statusline=%{hostname()}

答案2

statusline可以修改以包含变量名称。

例如,我正在使用该statline插件,所以我的statusline是:

statusline=[%{StatlineBufCount()}:%n] %<%1*[%f]%*%2*%h%w%m%r%* %y[%{&ff}%{g:statline_encoding_separator}%{strlen(&fenc)?&fenc:g:statline_no_encoding_string}] %5*%{&paste?(g:statline_show_paste_string):''}%*%5*%{&list?(g:statline_show_list_string):''}%*%=%-14( L%l/%L:C%c%V %)%P %4*%{exists('g:sfe_availableScms')?SfeStatus():''}%* %3*%{exists('g:loaded_syntastic_plugin')?SyntasticStatuslineFlag():''}%*%3*%{StatlineTabWarning()}%*%3*%{StatlineTrailingSpaceWarning()}%*

所有这些都是由插件本身连接起来的。

对于您的情况,您可以使用:

let hostname=system('hostname -s')
set statusline+=%F\ %P\ %c:%l\ %{hostname}

答案3

默认状态行或多或少可以这样模拟:

:set statusline=%f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P

在哪里

%f - buffer name (path to a file, or something)
%h - help flag
%w - preview flag
%m - modified flag
%r - readonly flag
%= - separater between the left (buffer name) and the right (ruler) parts
%-14.(...%) - minimum field width == 14
%l - line
%c - column
%V - virtual column
%P - percentage

添加主机名的一种方法是使用hostname()功能:

:set statusline=%#CursorColumn#\ %{hostname()}\ %*\ %f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P

在哪里

%#CursorColumn# - sets highlight group
%{...} - embeds arbitrary expression
%* - resets highlight group

您可能需要运行以下脚本来查看可用组的列表以及它们的内容看起来像:

:so $VIMRUNTIME/syntax/hitest.vim

或者您可以简单地将主机名括在括号中:

:set statusline=[%{hostname()}]\ %f\ %h%w%m%r%=%-14.(%l,%c%V%)\ %P

看我的其他答案如果您想更接近默认绘制状态线的方式。

相关内容