24 个版本

0.8.2 2021 年 3 月 30 日
0.7.3 2020 年 12 月 5 日
0.7.2 2020 年 10 月 12 日
0.6.2 2020 年 4 月 19 日
0.3.3 2019 年 6 月 3 日

#1996命令行工具

Download history 3/week @ 2024-03-09 1/week @ 2024-03-16 105/week @ 2024-03-30 27/week @ 2024-04-06

93 每月下载次数

GPL-3.0 许可证

105KB
2K SLoC

Crate CI

hors

一个很棒的程序 howdoi,它是用 Rust 实现的,同时还提供了一个易于使用的库。

它的速度比原始的 howdoi 程序要快。

关于二进制使用,请参阅本文件的其余部分。有关库文档,请查看此处

截图

简单使用示例

Screenshots of hors gif

更多示例

Screenshots of hors png

安装

hors是用 Rust 编写的。安装 hors 的推荐方法是使用 cargo

cargo install hors

在 Windows/Linux/macOS 平台上,您可以从 GitHub 下载预构建的二进制文件发布页面

在 macOS 上

hors 可以通过 homebrew 安装。

brew tap hors-org/hors && brew install hors

在 Windows 上

hors 可以通过 scoop 安装。

scoop bucket add w-bucket https://github.com/hors-org/w-bucket; scoop install hors

让它变得快速的原因

  1. 在 Rust 中实现,这导致了更少的运行时开销。
  2. 利用 tokio 并发功能,所以 hors 在需要获取多个答案时将进行并发搜索。
  3. 输出将被缓存,当您想要搜索相同的问题时, hors 将可能使用更少的网络流量来获取答案。

这里是一个简单的基准报告,在我的个人电脑上运行以下命令 3 次

time hors mysql create table with column comment -a -n 10 --paging never -e bing
rm ~/Library/Caches/hors/answers

注意:运行 rm 命令的目的是清除本地缓存。

它给了我以下输出

Executed in    2.55 secs   fish           external
   usr time  232.71 millis  150.00 micros  232.56 millis
   sys time   16.68 millis  562.00 micros   16.12 millis

Executed in    3.68 secs   fish           external
   usr time  252.02 millis  125.00 micros  251.90 millis
   sys time   19.18 millis  550.00 micros   18.63 millis

Executed in    2.55 secs   fish           external
   usr time  237.19 millis  117.00 micros  237.07 millis
   sys time   17.63 millis  565.00 micros   17.06 millis

用 howdoi 运行相同的命令

time howdoi mysql create table with column comment -a -n 4 -e bing -c
rm ~/Library/Caches/howdoi/*

注意:运行 rm 命令的目的是清除 howdoi 的本地缓存。

它给了我以下输出

Executed in    3.48 secs   fish           external
   usr time  303.67 millis  127.00 micros  303.54 millis
   sys time   52.53 millis  601.00 micros   51.93 millis

Executed in    3.65 secs   fish           external
   usr time  305.37 millis  111.00 micros  305.26 millis
   sys time   53.16 millis  549.00 micros   52.61 millis

Executed in    3.34 secs   fish           external
   usr time  319.07 millis   14.24 millis  304.83 millis
   sys time   55.63 millis    3.37 millis   52.26 millis

但请注意,这个简单的基准并不是非常精确,它高度依赖于网络信息。

测试平台

到目前为止, hors 已经在以下平台上进行了测试

  • Linux
  • OSX
  • Windows

用法

USAGE:
    hors [FLAGS] [OPTIONS] [query]...

ARGS:
    <query>...

FLAGS:
    -a, --all              display the full text of answer.
        --clear-cache      just clear local hors cache.
    -d, --disable-proxy    Disable system proxy.
    -h, --help             Prints help information
    -l, --link             display only the answer link.
    -r, --raw              make raw output (not colorized).
    -V, --version          Prints version information

OPTIONS:
    -e, --engine <engine>                    select middle search engine, currently support `bing`, `google`,
                                             `duckduckgo`, `stackoverflow`. [env: HORS_ENGINE=bing]  [default:
                                             duckduckgo]
    -n, --number-answers <number-answers>    number of answers to return. [default: 1]
    -p, --paging <paging>                    specify how to page output, can be `auto`, `never` [default: auto]

用法示例

  1. 想知道如何将 pandas dataframe 导出为 csv 文件吗?
hors pandas dataframe to csv

这里就是答案

- Answer from https://stackoverflow.com/questions/16923281/pandas-writing-dataframe-to-csv-file
df.to_csv(file_name, sep='\t')
  1. 我们只想知道答案在哪里存在?
hors pandas dataframe to csv -l

这里就是答案

Title - pandas writing dataframe to csv file
https://stackoverflow.com/questions/16923281/pandas-writing-dataframe-to-csv-file
  1. 我们想要更多关于答案的详细信息?
hors how to parse json in rust -a

这里就是答案

- Answer from https://stackoverflow.com/questions/30292752/how-do-i-parse-a-json-file

Solved by the many helpful members of the Rust community:

extern crate rustc_serialize;
use rustc_serialize::json::Json;
use std::fs::File;
use std::io::Read;

fn main() {
    let mut file = File::open("text.json").unwrap();
    let mut data = String::new();
    file.read_to_string(&mut data).unwrap();

    let json = Json::from_str(&data).unwrap();
    println!("{}", json.find_path(&["Address", "Street"]).unwrap());
}
  1. 如何获取多个答案
hors set git remote url -n 2 -a

这里就是答案

- Answer from https://stackoverflow.com/questions/2432764/how-to-change-the-uri-url-for-a-remote-git-repository
You can

git remote set-url origin new.git.url/here

(see git help remote) or you can just edit .git/config and change the URLs there. You're not in any danger of losing history unless you do something very silly (and if you're worried, just make a copy of your repo, since your repo is your history.)


^_^ ==================================================== ^_^

- Answer from https://stackoverflow.com/questions/42830557/git-remote-add-origin-vs-remote-set-url-origin
below is used to a add a new remote:

git remote add origin git@github.com:User/UserRepo.git

below is used to change the url of an existing remote repository:

git remote set-url origin git@github.com:User/UserRepo.git

below will push your code to the master branch of the remote repository defined with origin and -u let you point your current local branch to the remote master branch:

git push -u origin master

Documentation
  1. 默认的搜索引擎是bing,我该如何使用其他搜索引擎呢?
hors set git remote url -n 2 -a -e "google"

代理支持

如果感觉网络被屏蔽了,你可以尝试按照如下配置代理

export http_proxy=http://127.0.0.1:1087;export https_proxy=http://127.0.0.1:1087;

当然,这应该是你机器上有效的代理。

Windows上的分页功能

Hors使用less命令来实现分页功能,但这个命令在Windows上默认没有安装。你可以使用scoop来安装less

scoop install less

或者使用choco

choco install less

将Hors作为库使用

Hors可以用作库,以下是一个例子

use std::str::FromStr;
use hors::{self, SearchEngine};

let search_engine: SearchEngine = SearchEngine::from_str("bing").unwrap();
let target_links: Vec<String> = hors::search_links(
    "how to parse json in rust",
    search_engine,
)
.await
.unwrap();
assert_ne!(target_links.len(), 0);
for link in target_links {
    assert!(link.contains("stackoverflow.com"));
}

更多信息,请查看文档

特别感谢

非常感谢这个出色的项目和链接 :)

  • howdoi启发了hors(目前horshowdoi,它是用rust实现的)。
  • stackoverflow帮助用户解决编码问题。

关于名称

horshowdoi in rust的缩写。

依赖项

~15–29MB
~451K SLoC