小编Dev*_*lar的帖子

通过 find 调用 vi | xargs 破坏了我的终端。为什么?

调用vimthrough 时find | xargs,像这样:

find . -name "*.txt" | xargs vim
Run Code Online (Sandbox Code Playgroud)

你会收到一个警告

Input is not from a terminal
Run Code Online (Sandbox Code Playgroud)

以及之后的行为非常糟糕的终端。为什么


这个问题明确地是关于为什么,而不是关于如何避免。这是在别处被问到并回答的。

vim find

153
推荐指数
5
解决办法
3万
查看次数

vim:在子宏出错后继续宏?

我正在使用 vim 美化一些源代码。{1}

我创建了几个执行单独步骤的 vim 宏:删除尾随的 whilespace,删除之后的空行{,删除之前的空行,诸如此类{

现在,我想创建一个按顺序执行所有单个宏的宏。但是,一旦第一个递归宏终止(因为它再也找不到任何匹配项 -> 匹配错误),我的“包装器”宏也会终止。

在子宏产生错误后,有没有办法让 vim 宏继续?

{1}了解自动重新格式化程序。我什至可能会在我当前的问题上使用它们。我只是为了示例而提到了源代码重新格式化。不要发布有关此源美化器或那个的任何答案。问题不在于代码重新格式化本身,而在于 vim 宏。

例子:

  • 宏 1 - 修剪尾随空格 - qw/\s\+$d$@wq
  • 宏 2 - 删除 } 之前的空行 - qe/\n\n *}dd@eq
  • 包装宏 - retabbing,宏 1,宏 2 - qr:retab@w@eq

当我执行包装器时 -@r它会 retab,然后执行宏 1,直到找不到更多的尾随空格,然后终止(执行宏 2)。

澄清:

我正在寻找的是如何调用子宏,以便当该子宏终止时,调用宏会继续?

vim macros

17
推荐指数
2
解决办法
5974
查看次数

执行“echo $x | sed ...”和“echo $x | grep ...”的更好方法

我经常在脚本中找到这个(而且,我不得不承认,我自己写的):

a=$(echo "$x" | sed "s/foo/bar/")
Run Code Online (Sandbox Code Playgroud)

或者

if echo "$x" | grep -q foo
then
    ...
fi
Run Code Online (Sandbox Code Playgroud)

考虑“foo”来包含一些正则表达式的东西。

我觉得应该有——而且很可能——一种更好的表达方式,一种不涉及两个命令和一个管道,而是将事物包装成一些更紧凑的表达方式。

我就是找不到。有人吗?

shell grep sed

14
推荐指数
2
解决办法
2万
查看次数

如何告诉 apt 依赖项是手动解决的?

假设有一个软件我不想通过 安装apt,而是手动安装。(TeXLive,因为我想使用 2011 版本并且apt只有 2009 版本。)

假设我想通过 安装另一个软件apt,但这取决于第一个软件。(Vim LaTeXSuite,因为在系统范围内手动安装是很痛苦的。)

默认情况下,apt不会“看到”第一个软件,而是继续安装许多不需要和不受欢迎的软件(即 TeXLive 2009)以满足依赖元数据。

我怎样才能:

  • 告诉apt一个给定的包(例如texlive出于所有实际目的而安装的,并且它不应该作为其他包的依赖项安装?

  • 告诉apt安装给定的包(例如vim-latexsuite)而不关心它的依赖关系?

我已经通过各种筛选apt-相关联机手册,以及来到了空,也发现了这个问题,在这个网站,但觉得有要做到这一点不太hackish的方式,不是吗?

(从我的 Gentoo 时代开始,我记得emerge --inject/etc/portage/package.provides,并且基本上正在寻找apt等价物。)

package-management apt

14
推荐指数
1
解决办法
7397
查看次数

如何全局设置umask?

我正在使用私有用户组设置,即用户foo的主目录归foo:foo,而不是foo:users.

为此,我需要将 umask 全局设置为 002。

过了一会grep -RIi umask /etc/*儿,似乎修改UMASK条目/etc/login.defs应该可以解决问题。它也有——但仅适用于控制台登录。

如果我登录到我的桌面,并在那里打开一个终端,我仍然可以看到默认的umask 022. 从通过菜单启动的应用程序创建的文件也是如此。显然,显示管理器(或任何负责的 X11 组件)确实提供了一些与控制台登录不同的设置,如果我能说出它是哪一个,那就该死了。(我尝试更改 中的设置/etc/init.d/rc,不,它没有帮助。)

我如何/在哪里设置umask 全局(以及所有用户),以便 X11 桌面环境也获得备忘录?

(系统是 Linux Mint / Ubuntu,以防发生任何变化......)

linux permissions file-permissions umask

7
推荐指数
1
解决办法
2万
查看次数

如何在 xkb (us / intl) 中禁用死键

我在 X11 ( -xkblayout us -xkbvariant intl)上使用美国国际布局。

我想禁用死键,但切换回美国默认布局。(我需要德语元音和国际布局中的其他几个字符,我只是不在乎“死”`~'"^。)

我需要做什么?创建自定义布局(就像我按照这个极好的建议为 Windows 所做的那样)?我该怎么做?或者我可以以更简单的方式获得“无死键”行为吗?

keyboard-layout xkb

6
推荐指数
1
解决办法
2141
查看次数

ps输出和top输出的区别?

我发现很难理解 ps 和 top 产生的输出?

这是 top 的输出:

PID    PSID USERNAME  TID  PRI NICE  SIZE  RES  STATE  TIME    CPU   COMMAND
26439 23712 soumyau  26439  15    0 7512M 5234M sleep 286:25  16.67% or_lse2 (18)
26523 23712 soumyau  26439  -2    0 7512M 5234M cpu9  143:10   8.33% or_lse2
26522 23712 soumyau  26439  -2    0 7512M 5234M cpu3  143:10   8.33% or_lse2
Run Code Online (Sandbox Code Playgroud)

这是由 ps ( ps -L -p 26439 -o pcpu,psr,pid,user,tid):

%CPU  PSR   PID   USER       TID
99.9   3   26439 soumyau    26522
99.9   9   26439 …
Run Code Online (Sandbox Code Playgroud)

linux

4
推荐指数
1
解决办法
1万
查看次数

在给定列换行文件输出

我需要打印文件的内容(例如,cat $file),但以给定的列宽(假设为 80 列)包装输出,与终端宽度无关。

“标准” Unix 武器库中有什么东西可以给我这个功能吗?

bash shell

2
推荐指数
1
解决办法
1224
查看次数

Vim:改为在 GVim 中打开当前窗口/选项卡

假设我已经在给定的 Vim 会话中工作了一段时间,现在我真的很想在GVim 中拥有我正在查看的所有内容。

实际用例是一个带有大量窗口的终端 Vim 会话......我想点击激活它们而不是每次都通过 Ctrl-W,这可以在 GVim 中完成,但不能在 Vim 中完成(不是我的,至少)。

有没有办法获取当前在 Vim 中打开的缓冲区/窗口/选项卡,并在 GVim 中打开它们?

vim gvim

2
推荐指数
2
解决办法
299
查看次数