Skip to content

Gemini CLI 示例

不确定如何开始使用 Gemini CLI?本文档涵盖了如何使用 Gemini CLI 完成各种任务的示例。

注意: 结果是旨在展示潜在用例的示例。您的结果可能会有所不同。

根据内容重命名您的照片

场景:您有一个包含以下文件的文件夹:

bash
photos/photo1.png
photos/photo2.png
photos/photo3.png

给 Gemini 以下提示:

shell
根据我“photos”目录中照片的内容重命名它们。

结果:Gemini 会请求重命名文件的权限。

选择 是,仅允许一次。,您的文件将被重命名:

bash
photos/yellow_flowers.png
photos/antique_dresser.png
photos/green_android_robot.png

通过阅读代码来解释一个仓库

场景:您想通过检查其代码来了解一个流行的开源实用程序的工作原理,而不仅仅是它的 README。

给 Gemini CLI 以下提示:

shell
 https://github.com/chalk/chalk 克隆 'chalk' 仓库,阅读其关键源文件,并解释其工作原理。

结果:Gemini 将执行一系列操作来回答您的请求。

  1. 首先,它会请求运行 git clone 以下载仓库的权限。
  2. 接下来,它会找到重要的源文件并请求读取它们的权限。
  3. 最后,在分析代码后,它将提供一个摘要。

Gemini CLI 将返回基于实际源代码的解释:

markdown
`chalk` 库是一个流行的 npm 包,用于使用颜色为终端输出着色。分析源代码后,其工作原理如下:

- **核心功能:** 主文件设置了一个可链式调用的 API。每种颜色或修饰符(如 `bold``italic`)都是一个 getter,它将相应的 ANSI 转义码添加到内部堆栈中。

- **可链式调用 API:** 当您调用 `chalk.red.bold('Hello')` 时,您正在访问 getter。`red` getter 添加红色代码,`bold` getter 添加粗体代码。

- **输出生成:** 当链被视为字符串时(例如在 `console.log` 中),会调用最终的 `toString()` 方法。此方法将所有存储的 ANSI 代码连接起来,将它们包装在输入字符串(“Hello”)周围,并在末尾添加一个重置代码。这会生成终端可以渲染的最终、着色字符串。

将两个电子表格合并为一个

场景:您有两个 .csv 文件:Revenue - 2023.csvRevenue - 2024.csv。每个文件包含月度收入数据,如下所示:

csv
January,0
February,0
March,0
April,900
May,1000
June,1000
July,1200
August,1800
September,2000
October,2400
November,3400
December,2100

您想将这两个 .csv 文件合并到一个 .csv 文件中。

给 Gemini CLI 以下提示:

shell
将这两个 .csv 文件合并到一个 .csv 文件中,每个年份占一列。

结果:Gemini CLI 将读取每个文件,然后请求写入新文件的权限。提供您的权限后,Gemini CLI 将提供以下 .csv:

csv
Month,2023,2024
January,0,1000
February,0,1200
March,0,2400
April,900,500
May,1000,800
June,1000,900
July,1200,1000
August,1800,400
September,2000,2000
October,2400,3400
November,3400,1800
December,2100,9000

运行单元测试

场景:您编写了一个简单的登录页面。您希望编写单元测试以确保您的登录页面具有代码覆盖率。

给 Gemini CLI 以下提示:

shell
 Login.js 编写单元测试。

结果:Gemini CLI 将请求写入新文件的权限,并为您的登录页面创建一个测试

javascript
import React from 'react';
import { render, fireEvent, waitFor } from '@testing-library/react';
import Login from './Login';

// Mock the API call for login
jest.mock('./api', () => ({
  login: jest.fn(),
}));

describe('Login component', () => {
  it('renders the login form correctly', () => {
    const { getByLabelText, getByText } = render(<Login />);

    expect(getByLabelText('Username')).toBeInTheDocument();
    expect(getByLabelText('Password')).toBeInTheDocument();
    expect(getByText('Login')).toBeInTheDocument();
  });

  it('shows an error message with invalid credentials', async () => {
    const { getByLabelText, getByText, findByText } = render(<Login />);
    const usernameInput = getByLabelText('Username');
    const passwordInput = getByLabelText('Password');
    const loginButton = getByText('Login');

    // Mock the API to return an error
    require('./api').login.mockRejectedValue(new Error('Invalid credentials'));

    fireEvent.change(usernameInput, { target: { value: 'testuser' } });
    fireEvent.change(passwordInput, { target: { value: 'wrongpassword' } });
    fireEvent.click(loginButton);

    const errorMessage = await findByText('Invalid credentials');
    expect(errorMessage).toBeInTheDocument();
  });

  it('logs in successfully with valid credentials', async () => {
    const onLoginSuccess = jest.fn();
    const { getByLabelText, getByText } = render(
      <Login onLoginSuccess={onLoginSuccess} />,
    );
    const usernameInput = getByLabelText('Username');
    const passwordInput = getByLabelText('Password');
    const loginButton = getByText('Login');

    // Mock the API to return a success message
    require('./api').login.mockResolvedValue({ success: true });

    fireEvent.change(usernameInput, { target: { value: 'testuser' } });
    fireEvent.change(passwordInput, { target: { value: 'correctpassword' } });
    fireEvent.click(loginButton);

    await waitFor(() => {
      expect(onLoginSuccess).toHaveBeenCalled();
    });
  });

  it('disables the submit button while submitting', async () => {
    const { getByLabelText, getByText } = render(<Login />);
    const usernameInput = getByLabelText('Username');
    const passwordInput = getByLabelText('Password');
    const loginButton = getByText('Login');

    // Mock the API to have a delay
    require('./api').login.mockImplementation(
      () =>
        new Promise((resolve) =>
          setTimeout(() => resolve({ success: true }), 1000),
        ),
    );

    fireEvent.change(usernameInput, { target: { value: 'testuser' } });
    fireEvent.change(passwordInput, { target: { value: 'correctpassword' } });
    fireEvent.click(loginButton);

    expect(loginButton).toBeDisabled();

    await waitFor(() => {
      expect(loginButton).not.toBeDisabled();
    });
  });
});

基于 MIT 许可证发布