小编Ame*_*ina的帖子

Emacs 中“define-key global-map”和“global-set-key”的区别

看看人们如何在 Emacs 中编写键盘快捷键,我注意到两种不同的模式:

一种用途:

(global-set-key (kbd "M-N) 'select-next-window)
Run Code Online (Sandbox Code Playgroud)

另一个:

(define-key global-map (kbd "M-N") 'select-next-window)
Run Code Online (Sandbox Code Playgroud)

它们之间有什么区别?他们不是都在 Emacs 中定义了“全局”键盘快捷键吗?

emacs

10
推荐指数
1
解决办法
1335
查看次数

Emacs:打开一个缓冲区,其中包含一个大文件中 X 到 Y 行之间的所有行

本着与另一个问题相同的精神:cat line X to line Y on a large file

有没有办法从 Emacs 中打开(并在缓冲区上显示)来自巨大文本文件的一组给定的行(例如 lineX和之间的所有行Y)?

例如,打开并在缓冲区中显示文件中第 57890000 行和 57890010 行之间的所有行 huge.txt

更新: 我对至少可以以只读方式打开行(仅用于显示目的)的解决方案感兴趣,尽管如果我也可以编辑行(并保存到原始文件)会很棒。

emacs large-files

10
推荐指数
1
解决办法
2043
查看次数

mv * 文件夹(避免“无法移动”错误)

每当我想将数千个文件移动到一个新文件夹时,我总是遇到同样的问题。

> mkdir my_folder
> mv * my_folder
mv: cannot move 'my_folder to a subdirectory of itself 'my_folder'
Run Code Online (Sandbox Code Playgroud)

虽然我认为上面的错误是无害的(是吗?)我想知道是否有办法避免它。

如果重要,我对 zsh 中的解决方案或在各种 shell 中运行良好的解决方案感兴趣。

zsh rename

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

如何将第二个参数(函数)的 Zsh 自动完成规则设置为现有命令的规则?

我有一个自定义的 Zsh 函数g

function g() {
  # Handle arguments [...]
}
Run Code Online (Sandbox Code Playgroud)

在其中,我处理执行 Git 命令的简短参数。例如:

g ls # Executes git ls-files ...
g g  # Executes git grep ...
Run Code Online (Sandbox Code Playgroud)

我需要能够将自动完成规则设置为 Git 的短参数规则,但我不确定如何执行此操作。

例如,我需要g ls <TAB>使用制表符完成规则,git ls-files <TAB>这些规则将为我提供以下参数git ls-files

$ g ls --<TAB>
--abbrev                 -- set minimum SHA1 display-length
--cached                 -- show cached files in output
--deleted                -- show deleted files in output
# Etc...
Run Code Online (Sandbox Code Playgroud)

这不仅仅是设置g为自动完成,git因为我将自定义短命令映射到 Git 命令。

zsh git autocomplete

10
推荐指数
1
解决办法
3667
查看次数

在没有 chsh 或管理员权限的情况下更改默认 shell

我在这个线程中看到了以下片段:How to change from csh to bash as default shell

sleep 2
if (-x /usr/local/bin/bash) then
  exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash'
endif
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果您将此代码段放入~/.login其中,它将bash在您登录时调用。

我有一个类似的情况,我想使用一个类似的片段来调用zsh一个与我登录时使用的默认版本不同的版本。我遇到这个麻烦的部分原因是因为我无法选择zsh中允许的选项中我想要的版本,但chsh我没有管理员权限。

有了这个:

  • 在不同版本的 zsh 之间切换时,如何更改上面的代码片段以执行此操作?
  • 为什么exec上面的代码片段中需要两个命令?他们在做什么?另外,为什么上面的代码片段使用sh bash(用户应该用 登录csh

shell login zsh exec

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

使用 find + xargs 移动文件:目标不是目录?

当我运行以下命令时:

> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir
Run Code Online (Sandbox Code Playgroud)

我收到数百行说:

mv: target `/foo/bar/XX.csv` is not a directory
Run Code Online (Sandbox Code Playgroud)

为什么?我认为 xargs 会执行:

mv /foo/barXX.csv some_dir
Run Code Online (Sandbox Code Playgroud)

对于find找到的每个文件。这是怎么回事?顺便说一句,这是与zsh

更新:

更新1:

我试过:

find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir
Run Code Online (Sandbox Code Playgroud)

但后来我得到了几行:

mv: cannot stat `{}': No such file or directory
Run Code Online (Sandbox Code Playgroud)

虽然我认为该命令正在正确移动我的文件。

更新2:

单独-t使用时,我似乎不需要该选项mv。例如

> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv  file1.txt  file2.txt  my_dir
Run Code Online (Sandbox Code Playgroud)

效果很好。为什么我 …

find xargs

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

反向控制代码查找终端

我的理解是终端经常使用 ANSI 控制代码来表示非字母数字字符序列。例如,.inputrc在 Linux 中为 Bash 进行编辑时,很容易找到如下所示的代码序列:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
Run Code Online (Sandbox Code Playgroud)

上面的命令定义了 Bash 命令history-search-backward等的键绑定。

现在,在 bash 中,我可以read查看在我的键盘中输入的字符如何映射到 ANSI 控制代码。例如,如果我运行read,然后输入Ctrl-P,我得到:^P。同样,如果我输入 Alt-W,我会得到:^[W

我的问题是:是否有相反的程序、工具或网站?即输出或显示我需要在我的键盘上键入以获得给定的 ANSI 控制代码序列的键盘键序列的工具。例如,输入^[W应该输出:Alt-W

谢谢!

keyboard-shortcuts terminal escape-characters

8
推荐指数
1
解决办法
1199
查看次数

在脚本中测量时间

此线程显示了如何测量运行脚本所需的时间。就我而言,我对测量脚本中两点之间的时间感兴趣 。这是我想如何使用它的一个例子:

start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time
Run Code Online (Sandbox Code Playgroud)

如果可能,我希望显示的时间是人类可读的(秒、分钟、小时、天等)。任何想法如何做到这一点?

shell-script time

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

从 bash 到 zsh 的键盘绑定?

我的.inputrcfor bash上有以下条目:

"\C-p": history-search-backward
"\C-n": history-search-forward
"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char
"\ew": copy-region-as-kill
Run Code Online (Sandbox Code Playgroud)

我刚刚移至zsh,并希望保留与 bash 相同的键盘绑定。上面的行在 中是否有等价物zsh

keyboard-shortcuts zsh

8
推荐指数
1
解决办法
3577
查看次数

ZSH:`ls *(.)` 只列出常规文件,但 `ls *(/)` 不只列出目录

我不确定我是否正确使用了 ZSH 的通配符,但我认为ls *(/)只会列出 下的目录pwd,但事实并非如此,它递归地列出下每个目录下的所有文件pwd(我从这个有用的 zsh 提示列表中得到了声明)

什么是专门列出我当前路径下的目录的正确通配符?

ls zsh

8
推荐指数
1
解决办法
4550
查看次数