看看人们如何在 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 中定义了“全局”键盘快捷键吗?
本着与另一个问题相同的精神:cat line X to line Y on a large file:
有没有办法从 Emacs 中打开(并在缓冲区上显示)来自巨大文本文件的一组给定的行(例如 lineX和之间的所有行Y)?
例如,打开并在缓冲区中显示文件中第 57890000 行和 57890010 行之间的所有行 huge.txt
更新: 我对至少可以以只读方式打开行(仅用于显示目的)的解决方案感兴趣,尽管如果我也可以编辑行(并保存到原始文件)会很棒。
每当我想将数千个文件移动到一个新文件夹时,我总是遇到同样的问题。
> 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 中运行良好的解决方案感兴趣。
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 命令。
我在这个线程中看到了以下片段: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我没有管理员权限。
有了这个:
exec上面的代码片段中需要两个命令?他们在做什么?另外,为什么上面的代码片段使用sh 和 bash(用户应该用 登录csh)当我运行以下命令时:
> 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)
效果很好。为什么我 …
我的理解是终端经常使用 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
谢谢!
此线程显示了如何测量运行脚本所需的时间。就我而言,我对测量脚本中两点之间的时间感兴趣 。这是我想如何使用它的一个例子:
start_measuring_time
Line 1
Line 2
..
Line N
stop_measuring_time
show_elapsed_time
Run Code Online (Sandbox Code Playgroud)
如果可能,我希望显示的时间是人类可读的(秒、分钟、小时、天等)。任何想法如何做到这一点?
我的.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?
我不确定我是否正确使用了 ZSH 的通配符,但我认为ls *(/)只会列出 下的目录pwd,但事实并非如此,它递归地列出下每个目录下的所有文件pwd(我从这个有用的 zsh 提示列表中得到了声明)
什么是专门列出我当前路径下的目录的正确通配符?
zsh ×5
emacs ×2
autocomplete ×1
exec ×1
find ×1
git ×1
large-files ×1
login ×1
ls ×1
rename ×1
shell ×1
shell-script ×1
terminal ×1
time ×1
xargs ×1